使用Java配置的Spring Security:如何处理来自自定义提供程序的BadCredentialsException

两性

我需要使用url中的令牌ID(或可能是请求标头中的令牌ID)对一些其他服务进行身份验证,但这暂时不重要。我试图用Java配置来设置此使用作为指导这一职位我的问题是我不知道如何处理从提供者身份验证失败时引发的“ BadCredentialsException”。这是我的安全配置:

public static class SecurityConfigForRS extends
        WebSecurityConfigurerAdapter {

    @Autowired
    TokenAuthenticationProvider tokenAuthenticationProvider;

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.authenticationProvider(tokenAuthenticationProvider);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean()
            throws Exception {
        return super.authenticationManagerBean();
    }

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

        http.regexMatcher("^/rest.*")
                .addFilterBefore(
                        new TokenAuthenticationFilter(
                                authenticationManagerBean()),
                        AbstractPreAuthenticatedProcessingFilter.class)
                .and().csrf().disable();

    }
}

现在,我跳过其他实现-如果有帮助,我将在以后发布它们。

当令牌丢失或无效时,TokenAuthernticationProvider抛出BadCredentialsException我需要抓住这个问题并发回给我401-Unauthorized是否有可能做到这一点?

两性

我创建的第一个过滤器是GenericFilterBean的子类,它不支持身份验证失败处理程序或成功处理程序。但是,AbstractAuthenticationProcessingFilter支持成功和失败处理程序。我的过滤器很简单:

public class TokenAuthenticationProcessingFilter extends
    AbstractAuthenticationProcessingFilter {

public TokenAuthenticationProcessingFilter(
        RequestMatcher requiresAuthenticationRequestMatcher) {
    super(requiresAuthenticationRequestMatcher);
}

@Override
public Authentication attemptAuthentication(HttpServletRequest request,
        HttpServletResponse response) throws AuthenticationException,
        IOException, ServletException {
    Authentication auth = new TokenAuthentication("-1");
    try {
        Map<String, String[]> params = request.getParameterMap();
        if (!params.isEmpty() && params.containsKey("auth_token")) {
            String token = params.get("auth_token")[0];
            if (token != null) {
                auth = new TokenAuthentication(token);
            }
        }
        return this.getAuthenticationManager().authenticate(auth);
    } catch (AuthenticationException ae) {
        unsuccessfulAuthentication(request, response, ae);
    }
    return auth;
}}

而我的http安全性是:

    public static class SecurityConfigForRS extends
        WebSecurityConfigurerAdapter {

    @Autowired
    TokenAuthenticationProvider tokenAuthenticationProvider;

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.authenticationProvider(tokenAuthenticationProvider);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean()
            throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    protected AbstractAuthenticationProcessingFilter getTokenAuthFilter()
            throws Exception {
        TokenAuthenticationProcessingFilter tapf = new TokenAuthenticationProcessingFilter(
                new RegexRequestMatcher("^/rest.*", null));
        tapf.setAuthenticationManager(authenticationManagerBean());
        return tapf;
    }

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

        http.regexMatcher("^/rest.*")
                .addFilterAfter(getTokenAuthFilter(),
                        BasicAuthenticationFilter.class).csrf().disable();

    }
}

该过滤器链的顺序的事情!我把它放在BasicAuthenticationFilter之后,它工作正常。当然,可能会有更好的解决方案,但是目前可以使用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Spring Security配置自定义LDAP身份验证提供程序

来自分类Dev

自动装配服务在Spring Security Java配置自定义身份验证提供程序中不起作用

来自分类Dev

使用Visual Studio 2013 OWIN Security时如何自定义登录UI(外部提供程序)

来自分类Dev

如何在Spring Security中配置自定义身份验证过滤器-使用Java Config

来自分类Dev

如何仅使用 java 配置在 spring 配置中定义方面

来自分类Dev

具有Spring Security和Java Config的自定义身份验证提供程序

来自分类Dev

Spring Security Java Config自定义注销处理程序不起作用

来自分类Dev

带有自定义提供程序和处理程序的Spring Security 4在身份验证之前不缓存URL

来自分类Dev

使用Java config配置的自定义spring数据(mongo)存储库的自动装配如何工作?

来自分类Dev

如何使用基于纯Java的配置来配置Spring MVC?

来自分类Dev

如何使用基于Java的配置来配置Spring Batch StepScope?

来自分类Dev

如何避免在Java配置中使用Spring配置bean

来自分类Dev

如何配置自定义源以提供Spring Boot的@ConfigurationProperties

来自分类Dev

如何使用图像自定义滑块处理程序

来自分类Dev

自定义身份验证提供程序未称为Spring Security

来自分类Dev

Spring Security自定义身份验证提供程序不起作用

来自分类Dev

让Spring Security选择实现自定义身份验证提供程序的类的实现

来自分类Dev

带有自定义提供程序的 Spring Boot + Security OAuth2.0 客户端

来自分类Dev

如何使用java config将Spring Security 3.2配置为使用Dao身份验证和自定义身份验证过滤器

来自分类Dev

使用(不使用)execCommand进行自定义样式(如何处理重叠的标签)

来自分类Dev

Spring Security Java配置

来自分类Dev

为Java编写自定义声纳规则时如何处理assertionError

来自分类Dev

为Java编写自定义声纳规则时如何处理assertionError

来自分类Dev

使用自定义内核时如何处理Linux内核更新?

来自分类Dev

如何处理 JmsChannelFactoryBean 错误,是否有自定义错误通道使用的可能性?

来自分类Dev

Workbox - 使用自定义处理程序

来自分类Dev

如何根据我得到的错误来自定义SPRING_SECURITY_LAST_EXCEPTION.message

来自分类Dev

使用PySide2中的自定义图像提供程序处理16位灰度图像

来自分类Dev

来自自定义表的Spring Security身份验证

Related 相关文章

  1. 1

    使用Spring Security配置自定义LDAP身份验证提供程序

  2. 2

    自动装配服务在Spring Security Java配置自定义身份验证提供程序中不起作用

  3. 3

    使用Visual Studio 2013 OWIN Security时如何自定义登录UI(外部提供程序)

  4. 4

    如何在Spring Security中配置自定义身份验证过滤器-使用Java Config

  5. 5

    如何仅使用 java 配置在 spring 配置中定义方面

  6. 6

    具有Spring Security和Java Config的自定义身份验证提供程序

  7. 7

    Spring Security Java Config自定义注销处理程序不起作用

  8. 8

    带有自定义提供程序和处理程序的Spring Security 4在身份验证之前不缓存URL

  9. 9

    使用Java config配置的自定义spring数据(mongo)存储库的自动装配如何工作?

  10. 10

    如何使用基于纯Java的配置来配置Spring MVC?

  11. 11

    如何使用基于Java的配置来配置Spring Batch StepScope?

  12. 12

    如何避免在Java配置中使用Spring配置bean

  13. 13

    如何配置自定义源以提供Spring Boot的@ConfigurationProperties

  14. 14

    如何使用图像自定义滑块处理程序

  15. 15

    自定义身份验证提供程序未称为Spring Security

  16. 16

    Spring Security自定义身份验证提供程序不起作用

  17. 17

    让Spring Security选择实现自定义身份验证提供程序的类的实现

  18. 18

    带有自定义提供程序的 Spring Boot + Security OAuth2.0 客户端

  19. 19

    如何使用java config将Spring Security 3.2配置为使用Dao身份验证和自定义身份验证过滤器

  20. 20

    使用(不使用)execCommand进行自定义样式(如何处理重叠的标签)

  21. 21

    Spring Security Java配置

  22. 22

    为Java编写自定义声纳规则时如何处理assertionError

  23. 23

    为Java编写自定义声纳规则时如何处理assertionError

  24. 24

    使用自定义内核时如何处理Linux内核更新?

  25. 25

    如何处理 JmsChannelFactoryBean 错误,是否有自定义错误通道使用的可能性?

  26. 26

    Workbox - 使用自定义处理程序

  27. 27

    如何根据我得到的错误来自定义SPRING_SECURITY_LAST_EXCEPTION.message

  28. 28

    使用PySide2中的自定义图像提供程序处理16位灰度图像

  29. 29

    来自自定义表的Spring Security身份验证

热门标签

归档