как перенаправиться к методу при входе / выходе из системы до вызова target-url в spring-security, Spring mvc - PullRequest
16 голосов
/ 21 июля 2011

Я пытаюсь записать текущее время входа в систему (в методе или объекте) после успешного входа в систему и назначить время LastLogin текущему времени входа в систему при выходе из системы. Я использую Spring Security для входа в систему, выхода из системы. Но я не знаю, как получить контроль над методом, прежде чем он перейдет к целевому URL.

SPRING-SECURITY.XML -

<security:form-login login-page="/login"  login-processing-url="/home/currentTime" authentication-failure-url="/login?error=true" default-target-url="/home"/>

<security:logout invalidate-session="true"
            logout-success-url="/home/copyLastloginToCurrentLoginTime" logout-url="/logout" />

КОНТРОЛЛЕР - / home -

 @RequestMapping(value = "/currentTime", method = RequestMethod.GET)
        public void recordCurrentLoginTime(Model model) { //code to record current time }

    @RequestMapping(value = "/copyLastloginToCurrentLoginTime", method = RequestMethod.GET)
    public void changeLastLoginTime(Model model) {//code to copy current to last time }

ПРОБЛЕМА - Я получаю сообщение об ошибке 404 для URL-адреса проекта-заголовка / j_spring_security_check. и когда я пытаюсь отладить, это не входит в методы контроллера вообще. Должен ли я использовать некоторые фильтры или что-то еще для этой цели?

Я видел SpringSecurity: всегда перенаправлять зарегистрированных пользователей на страницу и Как обработать вход в форму с помощью Spring Security / Spring MVC . Но не смог достичь своей цели.

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

  • Спасибо

Ответы [ 2 ]

32 голосов
/ 21 июля 2011

Напишите свой собственный AuthenticationSuccessHandler и LogoutSuccessHandler .

Пример:

spring-security.xml :

<security:form-login login-page="/login"
    login-processing-url="/login_check"
    authentication-failure-url="/login?error=true"
    authentication-success-handler-ref="myAuthenticationSuccessHandler"
/>

<security:logout
    logout-url="/logout"
    success-handler-ref="myLogoutSuccessHandler"
/>

AuthenticationSuccessHandler

@Component
public class MyAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {

    @Autowired
    private UserService userService;

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws IOException, ServletException {

        // changeLastLoginTime(username)
        userService.changeLastLoginTime(authentication.getName());

        setDefaultTargetUrl("/home");
        super.onAuthenticationSuccess(request, response, authentication);
    }
}

LogoutSuccessHandler

@Component
public class MyLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) throws IOException, ServletException {

        if (authentication != null) {
            // do something 
        }

        setDefaultTargetUrl("/login");
        super.onLogoutSuccess(request, response, authentication);       
    }
}
0 голосов
/ 14 июля 2017

Вы можете отобразить URL-адрес по умолчанию в вашем отображении как

<security:form-login login-page="/login"
    login-processing-url="/login_check"
    authentication-failure-url="/login?error=true"
    default-target-url = "/welcome"
    authentication-success-handler-ref="myAuthenticationSuccessHandler"/>

Когда пользователь аутентифицирован, это время, когда пользователь обращается к вашей системе.Сделайте обновление через DAO в пользовательской таблице с текущей датой и временем.Простой процесс и все готово

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