如何在没有XML配置的情况下定义自定义AuthenticationEntryPoint

 大狗nonodq_284 发布于 2023-01-04 10:03

我已经苦苦挣扎了好几天了.我是Spring Boot的新手,并且喜欢不使用XML配置的想法.

我创建了一个RESTfull应用程序(使用JSON).我正在按照本教程正确配置身份验证.

我认为我设法使用Java配置重现几乎所有的配置,除了一件事 - AuthenticationEntryPoint

本教程使用http像这样的标记中的属性,并按以下方式定义formLogin:



  

  

  


Spring Security手册中的AuthenticationEntryPoint解释说:

可以使用元素上的entry-point-ref属性设置AuthenticationEntryPoint.

没有提到有关如何使用Java配置执行此操作的任何内容.

那么如何restAuthenticationEntryPoint在没有XML 的情况下"注册"我自己的,以防止在使用formLogin时重定向到登录表单?

下面我将提到我尝试过的内容.

谢谢你们.


在我的尝试中,发现你可以使用basicAuth定义它,如下所示:

@Configuration
@Order(1)                                                        
public static class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {


        if (restAuthenticationEntryPoint == null) {
            restAuthenticationEntryPoint = new RestAuthenticationEntryPoint();
        }

        http
            .authorizeRequests()
                .antMatchers("/**").hasAnyRole(Sec.ADMIN,Sec.SUPER_USER)
...
        .and()
            .httpBasic()
                .authenticationEntryPoint(restAuthenticationEntryPoint)

但我正在使用这样的表单登录(没有httpBasic部分):

        .and()
            .formLogin()
                .successHandler(mySavedRequestAwareAuthenticationSuccessHandler)
                .failureHandler(simpleUrlAuthenticationFailureHandler)

问题是,当它没有收到凭据时,它会重定向到登录表单.由于这是一个REST服务,它不应该.

该文件对FormLoginConfigurer(类.formLogin()使用)说:

共享对象已创建

填充以下共享对象

AuthenticationEntryPoint

但是找不到覆盖它的方法.
有任何想法吗?

PS
不要认为将登录表单覆盖到只返回错误的自定义表单是个好主意.

1 个回答
  • 您提供的参考文档的引用指向您http.exceptionHandling().您可以在那里设置共享入口点.

    http.exceptionHandling().authenticationEntryPoint(myEntryPoint);
    

    2023-01-04 10:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有