Spring Boot 2 Interceptor在每个请求上都解析“ / login”

时间:2019-07-08 08:41:20

标签: java spring spring-boot spring-security

在Spring引导安全性内,如果我检测到用户已登录,则尝试将服务器端在Spring引导中的登录页面自动重定向到概述页面。仅在用户注销后才显示登录屏幕。

@Configuration
public class MvcConfig implements WebMvcConfigurer
{

   @Override
   public void addInterceptors( InterceptorRegistry registry )
   {
      registry.addInterceptor( new LoginInterceptor() ).addPathPatterns( "/login" );
   }

我在LoginInterceptor内部拥有

   @Override
   public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception
   {

      Authentication auth = SecurityContextHolder.getContext().getAuthentication();
      String url = request.getRequestURL().toString();
      System.out.println(url);
      if( auth.isAuthenticated() )
      {
         response.sendRedirect( "/my/overview" );
         return false;
      }

      return true;
   }

但是,即使我已经登录,调试器似乎也认为我仍在/ login路由上。 Spring Boot是否通过/login路由每个请求以检查身份验证?我如何实现除非用户注销否则不解决登录页面的目标?

1 个答案:

答案 0 :(得分:0)

实际上,这里发生的是为isAuthenticated返回了“ anonymousUser”,因此,经过身份验证的方法不起作用。对于未经授权的帐户的重定向使我觉得一切都在通过登录路径进行,而实际上这只是安全性在起作用。 要检查原理是否为null是替代方法。

 if( auth.isAuthenticated() && principal != null )
 {
      response.sendRedirect( OVERVIEW_PAGE );
      return false;
 }