加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:51:16 所属栏目:百科 来源:网络整理
导读:我已经挣扎了好几天了.我是 Spring Boot的新手,并且喜欢不使用XML配置的想法. 我创建了一个RESTfull应用程序(使用JSON).我正在关注this tutorial以正确配置身份验证. 我认为我设法使用Java配置重现几乎所有的配置,除了一件事 – AuthenticationEntryPoint 本
我已经挣扎了好几天了.我是 Spring Boot的新手,并且喜欢不使用XML配置的想法.

我创建了一个RESTfull应用程序(使用JSON).我正在关注this tutorial以正确配置身份验证.

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

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

<http entry-point-ref="restAuthenticationEntryPoint">

  <intercept-url pattern="/api/admin/**" access="ROLE_ADMIN"/>

  <form-login
     authentication-success-handler-ref="mySuccessHandler"
     authentication-failure-handler-ref="myFailureHandler"
  />

  <logout />

</http>

Spring Security manual中的AuthenticationEntryPoint说明说:

AuthenticationEntryPoint can be set using the entry-point-ref attribute on the < http > element.

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

那么如何在没有XML的情况下“注册”我自己的restAuthenticationEntryPoint,以防止在使用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的documentation(类.formLogin()使用)说:

Shared Objects Created

The following shared objects are populated

06003

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

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

您提供的参考文档的引用指向http.exceptionHandling().您可以在那里设置共享入口点.
http.exceptionHandling().authenticationEntryPoint(myEntryPoint);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读