【问题标题】:Spring Security: how to add add Failure handlerSpring Security:如何添加添加失败处理程序
【发布时间】:2016-01-08 06:05:07
【问题描述】:

我有一个关于 Spring Security 的问题。

现在我使用 siple siteMinderFilter 来限制对多个页面的访问:

    RequestHeaderAuthenticationFilter siteMinderFilter = new RequestHeaderAuthenticationFilter (ignored);
    siteMinderFilter.setPrincipalRequestHeader("SM_USER");
    siteMinderFilter.setAuthenticationManager(authenticationManager()); 

在 SM_USER 错误的情况下,我希望使用我的 SmUserFailureHandler:

@Component
public class SmUserFailureHandler extends SimpleUrlAuthenticationFailureHandler {

private Logger log = Logger.getLogger(SmUserFailureHandler.class);

@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) 
                                                                                                throws IOException, ServletException {
      super.onAuthenticationFailure(request, response, exception);

      log.debug("got AuthenticationException");
      if(exception.getClass().isAssignableFrom(PreAuthenticatedCredentialsNotFoundException.class)) {
      log.debug("got PreAuthenticatedCredentialsNotFoundException");

     } 
   }
}

然后在spring配置类中

@Bean
public SmUserFailureHandler smUserFailureHandler(){
    return new SmUserFailureHandler();
}

但现在我无法理解如何将它包含在我的 authenticationProvider 中。我发现使用这种 FailureHandler 的唯一位置是登录表单

http.formLogin().loginPage("/my/login/page/").failureHandler(smUserFailureHandler());

但我希望它适用于所有需要 SM_USER 的资源。

我该如何实现它?

【问题讨论】:

    标签: java spring-mvc authentication spring-security siteminder


    【解决方案1】:

    您正在使用 AuthenticationFailureHandler ... 身份验证可以成功也可以不成功 - 您不关心资源。如果身份验证成功 - 您有登录用户 - 然后有授权,该过程检查用户是否有权访问所请求的资源。您需要生成/处理 AccessDenied 情况。

    更简单的方法是覆盖处理 AccessDeniedException 的逻辑(但这是为每个拒绝访问生成的)

    <bean id="exceptionTranslationFilter"
        class="org.springframework.security.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
        <property name="accessDeniedHandler" ref="accessDeniedHandler" />
    </bean>
    
    <bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
        <property name="errorPage" value="/noaccess.jsp" />
    </bean>
    

    来源:http://forum.spring.io/forum/spring-projects/security/62027-redirect-on-authorization-failure?p=463489#post463489

    如果您想为给定资源生成特殊消息,那么您将不得不更改其他内容。也许它只需要一个 AccessDecisionVoter,但我没有使用过。

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2013-08-11
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多