如何防止未经身份验证的用户重定向到Spring Security中的登录页面?

时间:2016-11-23 10:56:55

标签: spring spring-mvc authentication spring-security

我正在使用的Web应用程序使用Spring Security。我对其进行了配置,以便未经授权的请求由其中一个控制器处理(使用access-denied-handler)。但是,当有人在登录前尝试访问页面时,他发现自己处于登录页面而不通过控制器。我希望这个案例由上面提到的同一个控制器处理。

有一个similar question,其中REST API请求由控制器处理,其余请求被重定向到登录页面。这是通过两个入口点实现的。我想要的是一个cotroller处理所有未经授权/未经身份验证的请求,无论是服务调用还是静态页面。所以,我不需要两种不同的机制。我还需要配置入口点吗?我想应该有一种更简单的方法。

以下是我的安全配置大致如下:

<http use-expressions="true" pattern="/**" authentication-manager-ref="operatorAuthenticationManager">
    <access-denied-handler error-page="/denied" />

    <intercept-url pattern="/order/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/>
    <intercept-url pattern="/client/**" access="hasAnyAuthority('ROLE_ADMIN')"/>
    <intercept-url pattern="/denied" access="permitAll"/>
    <intercept-url pattern="/login" access="permitAll"/>
    <intercept-url pattern="/login.jsp" access="permitAll"/>
    ...
    <intercept-url pattern="/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/>

    <form-login login-page="/login" default-target-url="/" always-use-default-target="true"
                authentication-success-handler-ref="operatorAuthenticationSuccessHandler" authentication-failure-url="/login?error"/>
    <logout logout-success-url="/login"/>
</http>

1 个答案:

答案 0 :(得分:2)

切入点是:

由未经身份验证的用户尝试访问受保护资源触发身份验证过程

话虽如此,入口点bean完全符合您的要求。

在您的切入点,您可以定义重定向到错误页面。

@Component
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{

   @Override
   public void commence( HttpServletRequest request, HttpServletResponse response, 
    AuthenticationException authException ) throws IOException{
      //your implementation
   }
}

上面的示例显示,您需要弄清楚如何使用HttpServletReponse进行重定向,这是一个显示如何执行此操作的链接:

HttpServletResponse sendRedirect permanent

相关问题