Spring Security PreAuthentication checkForPrincipalChanges错误?

时间:2011-02-16 01:20:33

标签: spring-security

这是Spring Security中的错误吗?

org.springframework.security.web.authentication.preauth.Abs​​tractPreAuthenticatedProcessingFilter 行:134

...
Object principal = getPreAuthenticatedPrincipal(request);
    if (checkForPrincipalChanges &&
        !currentUser.getName().equals(principal)) {
        logger.debug("Pre-authenticated principal has changed to " + principal + " and will be reauthenticated");
...

它不应该认为null preAuthenticatedPrincipal是不变的吗?

我不应该在每次请求时发送preAuthenticatedPrincipal吗?

不应该检查这个值是否为空?

不应该是

Object principal = getPreAuthenticatedPrincipal(request);
    if (checkForPrincipalChanges && 
        principal!=null &&
        !currentUser.getName().equals(principal)) {
        logger.debug("Pre-authenticated principal has changed to " + principal + " and will be reauthenticated");

注意添加 principal!= null&&

这是在spring-security-web-3.0.2.RELEASE.jar

中找到的

如果这确实是一个错误,那么我想通过在我的实现中添加以下覆盖来解决它:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (getPreAuthenticatedPrincipal((HttpServletRequest) request) != null) {
        super.doFilter(request, response, chain);
    } else {
        //if the request did not include a preauthenticated principal then we should just continue are merry way down the filter chain
        chain.doFilter(request, response);
    }
}

如果我错误地认为这是一个错误以及我的解决方法中是否遗漏了任何内容,请告诉我。

1 个答案:

答案 0 :(得分:2)

由于以下原因,这不是错误。

    如果 preauthenticated principal doAuthenticate()
  • null方法会返回而不会出错。

  • requiresAuthentication()方法中,您可以打开或关闭checkForPrincipalChanges

  • 仅当currentUser null时,才会进行以下检查。

    if(checkForPrincipalChanges&&!currentUser.getName()。equals(principal)){

这种检查应该按原样进行,因为校长确实发生了变化 - 从非null currentUser null {{1现在。