在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
路由每个请求以检查身份验证?我如何实现除非用户注销否则不解决登录页面的目标?
答案 0 :(得分:0)
实际上,这里发生的是为isAuthenticated返回了“ anonymousUser”,因此,经过身份验证的方法不起作用。对于未经授权的帐户的重定向使我觉得一切都在通过登录路径进行,而实际上这只是安全性在起作用。 要检查原理是否为null是替代方法。
if( auth.isAuthenticated() && principal != null )
{
response.sendRedirect( OVERVIEW_PAGE );
return false;
}