Безопасность Spring пользовательский фильтр (пароль изменения)

Я использую безопасность Spring для обеспечения Запросов HTTP к веб-сайту. Основное использование для обеспечения страниц, таким образом, что пользователь перенаправляется к странице входа в систему при попытке получить доступ к тем страницам.

Однако у меня есть дальнейшее требование. В моей модели я могу отметить пароль пользователя, как являющийся временным таким образом, что, когда они успешно входят в систему, они должны быть автоматически вынуждены изменить свой пароль. После того как пароль изменяется, они должны затем быть переданы на странице, к которой они первоначально пытались получить доступ.

Кто-либо использовал безопасность Spring с этой целью? Я должен создать свой собственный фильтр?

Спасибо,

Andrew

15
задан DrewEaster 26 July 2010 в 14:07
поделиться

2 ответа

В Spring Security 3.0 вы можете реализовать собственный AuthenticationSuccessHandler .

В этом обработчике вы можете перенаправить пользователя с временным паролем на страницу изменения пароля вместо первоначально запрошенной страницы. После изменения пароля вы можете перенаправить пользователя на первоначально запрошенную страницу, используя SavedRequestAwareAuthenticationSuccessHandler , который является реализацией обработчика по умолчанию.

public class MyHandler implements AuthenticationSuccessHandler {
    private AuthenticationSuccessHandler target = new SavedRequestAwareAuthenticationSuccessHandler();

    public void onAuthenticationSuccess(HttpServletRequest request,
        HttpServletResponse response, Authentication auth) {
        if (hasTemporaryPassword(auth)) {
            response.sendRedirect("/changePassword");
        } else {
            target.onAuthenticationSuccess(request, response, auth);
        }
    }

    public void proceed(HttpServletRequest request, 
        HttpServletResponse response, Authentication auth) {
        target.onAuthenticationSuccess(request, response, auth);
    }
}

@Controller("/changePassword")
public class ChangePasswordController {

    @Autowired
    private MyHandler handler;

    @RequestMapping(method = POST)
    public void changePassword(HttpServletRequest request, 
        HttpServletResponse response,
        @RequestParam(name = "newPassword") String newPassword) {

        // handle password change
        ...

        // proceed to the secured page
        handler.proceed(request, response, auth);        
    }

    // form display method, etc
    ...
}
19
ответ дан 1 December 2019 в 00:49
поделиться

Да, я сделал это с помощью фильтра ForceChangePasswordFilter. Потому что, если пользователь вводит URL-адрес вручную, он может обойти форму изменения пароля. С фильтром запросы всегда перехватываются.

6
ответ дан 1 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: