Java spring安全访问导致循环重定向的非特权资源 spring security记住我登录访问非特权资源导致无限循环重定向

Java spring安全访问导致循环重定向的非特权资源 spring security记住我登录访问非特权资源导致无限循环重定向,java,spring,security,spring-security,infinite-loop,Java,Spring,Security,Spring Security,Infinite Loop,我的项目中有一些角色用于访问不同的资源。 当用户访问未经授权的资源时,应该将其重定向到一个错误页面,例如403页面,因此我编写我的访问拒绝处理程序来重定向此请求。 当它运行时,我发现我的未经授权的请求卡在无限循环登录操作中,使用记住我登录,但它在普通用户名密码登录中运行良好 通过读取相关资源存在两种类型的访问拒绝异常,一种是用户未授权,另一种是资源未授权。密钥过滤器是ExceptionTranslationFilter,它的代码如下:(一些点代码片段)(官方代码) if(authenticati

我的项目中有一些角色用于访问不同的资源。
当用户访问未经授权的资源时,应该将其重定向到一个错误页面,例如403页面,因此我编写我的访问拒绝处理程序来重定向此请求。
当它运行时,我发现我的未经授权的请求卡在无限循环登录操作中,使用记住我登录,但它在普通用户名密码登录中运行良好

通过读取相关资源存在两种类型的访问拒绝异常,一种是用户未授权,另一种是资源未授权。密钥过滤器是ExceptionTranslationFilter,它的代码如下:(一些点代码片段)(官方代码)

if(authenticationTrustResolver.isAnonymous(身份验证)| | authenticationTrustResolver.isRememberMe(身份验证)){
logger.debug(
“访问被拒绝(用户是”+(authenticationTrustResolver.isAnonymous(身份验证)?“匿名”:“未完全身份验证”)+”;重定向到身份验证入口点”,
例外情况);
sendStartAuthentication(
要求
答复,,
链条
新的非充分身份验证异常(
“访问此资源需要完全身份验证”);
}
否则{
logger.debug(
“访问被拒绝(用户不是匿名的);委托给AccessDeniedHandler”,
例外情况);
handle(请求、响应、,
(AccessDeniedException)异常);
}
我发现它在使用“记住我”登录时处理了未经授权的用户,它将毫无疑问地通过cookies自动登录,
但是AuthenticationEntryPoint将再次重定向登录页面….
另一方面,重写AuthenticationEntryPoint是没有用的,AuthenticationEntryPoint可以决定请求重定向到哪个页面,因为SecurityContext已在sendStartAuthentication方法中被清除,请参见以下代码片段:

受保护的无效发送StartAuthentication(HttpServletRequest),
HttpServletResponse响应,过滤器链,
AuthenticationException原因)引发ServletException,IOException{
//SEC-112:清除SecurityContextHolder的身份验证,因为
//现有身份验证不再被视为有效
SecurityContextHolder.getContext().setAuthentication(null);
saveRequest(请求,响应);
debug(“调用身份验证入口点”);
authenticationEntryPoint.Start(请求、响应、原因);
}
我使用的是SpringSecurity4.2.2版本,在4.1.x之前的早期版本中访问deny时,我发现RememberMe登录是正常的,您可以在以下链接中找到这个“问题:
github.com/spring projects/spring security/issues/2427

最后,我不想使用以前的版本,如何解决使用RememberMe登录访问未授权资源的问题?
有人能帮我吗?