PreAuthentication Spring Security Проверка Ошибка ForPrincipalChanges? - PullRequest
1 голос
/ 16 февраля 2011

Это ошибка в Spring Security?

org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter линия: 134

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

Не следует ли считать нулевой 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");

Обратите внимание на добавление принципала! = 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 Ответ

2 голосов
/ 16 февраля 2011

Это не ошибка по следующим причинам.

  • doAuthenticate() метод возвращает без ошибки, если предварительно аутентифицированный принципал равен null.

  • В методе requiresAuthentication() вы можете включить или выключить checkForPrincipalChanges

  • Следующая проверка выполняется, только если currentUser равно , а не null.

    if (checkForPrincipalChanges &&! CurrentUser.getName (). Equals (Principal)) {

Эта проверка должна произойти как есть, поскольку в принципе действительно есть изменение принципала - с ненулевого currentUser на ноль principal сейчас. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...