当前位置: 首页 > 知识库问答 >
问题:

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

范稳
2023-03-14

我已经挣扎了几天了。我对Spring Boot还是个新手,喜欢不使用XML配置的想法。

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

<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>

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

没有提到任何关于如何使用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服务,它不应该。

AuthenticationEntryPoint

但找不到重写它的方法。
有什么想法吗?

附注
不要认为将登录表单重写为只返回错误的自定义表单是个好主意。

共有1个答案

田骁
2023-03-14

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

http.exceptionHandling().authenticationEntryPoint(myEntryPoint);
 类似资料:
  • 我正在尝试设置SpringXML配置,而不必创建进一步的。但是我经常遇到以下异常,即使我在 spring.xml: 我错过了什么?

  • 问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1

  • 我想更改自定义toast消息的背景,但不想为每种颜色创建新的xml文件。更具体地说; 这是我的custom_toast_border.xml文件,在drawable目录下。 我的custom_toast.xml布局 Java代码: 我想为吐司背景三种不同的颜色。我是否必须为每种颜色创建单独的文件?(像custom_toast_border_red,..._green,.._yellow)。我无法在

  • MOSN 自定义配置说明。 本文是对 MOSN 自定义配置的说明。 Duration String 字符串,由一个十进制数字和一个时间单位后缀组成,有效的时间单位为 ns、us(或?s)、ms、s、m、h,例如 1h、3s、500ms。 metadata metadata 用于 MOSN 路由和 Cluster Host 之间的匹配。 { "filter_metadata":{ "mo

  • 如果你想自定义 Next.js 的高级配置,可以在根目录下新建next.config.js文件(与pages/ 和 package.json一起) 注意:next.config.js是一个 Node.js 模块,不是一个 JSON 文件,可以用于 Next 启动服务已经构建阶段,但是不作用于浏览器端。 // next.config.js module.exports = { /* config

  • 我正在尝试构建一个基本的REST服务,它使用Spring Security和OAuth2.0身份验证和授权进行安全保护。 我试图限制所涉及的元素,所以我不是复制粘贴依赖于Spring bean、Spring MVC等的Spring Security Oath XML配置,而是直接使用Spring Security Oauth类。 尝试从/oauth/Token获取访问令牌时遇到了一个障碍。我可能缺