Spring Security: перенаправление на страницу входа в систему, если аутентификация не удалась

У нас есть два способа входа в систему.

  • Имя пользователя и пароль отправляются другим приложением в запросе заголовки. ИТ проверяется, и, если имя пользователя и пароль верны, он вводится. [Для этого написан специальный фильтр]
  • Если имя пользователя и пароль не указаны в заголовках запроса, отображается экран входа в систему.
  • Когда имя пользователя и пароль присутствуют в заголовке запроса и если он неверен, мне отображается страница HTTP-статус 401 - Ошибка аутентификации: неверные учетные данные .

    Как сделать так, чтобы в случае сбоя аутентификации отображалась страница входа в систему?

    Ниже приведен код безопасности. xml

        <http auto-config="true" use-expressions="true">
                 <access-denied-handler error-page="/login.jsp"/>
                <intercept-url pattern="/*Login*" access="hasRole('ROLE_ANONYMOUS')"/>
                <intercept-url pattern="/*" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')"/>
                <custom-filter ref="requestHeaderFilter" before="FORM_LOGIN_FILTER"/>
                <form-login login-page="/login.jsp"/>
    
        </http>
    

    Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

    Изменить: Добавление кода для фильтра RequestHeader в мое приложение

    public class RequestHeaderProcessingFilter extends AbstractAuthenticationProcessingFilter{
    
    private String usernameHeader = "j_username";
    private String passwordHeader = "j_password";
    
    
    protected RequestHeaderProcessingFilter() {
        super("/login_direct");
     }
    
    //getters and setters
    
    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
        String username = request.getHeader(usernameHeader);
        String password = request.getHeader(passwordHeader);
    
         SignedUsernamePasswordAuthenticationToken authRequest =
            new SignedUsernamePasswordAuthenticationToken(username, password);
    
          return this.getAuthenticationManager().authenticate(authRequest); 
    }
    

    }

    8
    задан Pouyan Khodabakhsh 16 April 2019 в 06:22
    поделиться