spring-mvc - tutorial - spring security rest api
cómo ser redirigido a un método en el inicio/cierre de sesión antes de que target-url se llame en spring-security, spring mvc (2)
Estoy tratando de registrar la hora actual de inicio de sesión (en un método u objeto) una vez que el inicio de sesión es exitoso y asigno la hora de inicio de sesión pasado al tiempo de inicio de sesión actual al cerrar la sesión. Estoy usando Spring Spring para iniciar sesión, cerrar sesión. Pero no sé cómo tomar el control de un método antes de que vaya a la URL de destino.
PRIMAVERA-SEGURIDAD.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" />
CONTROLADOR - / inicio -
@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 }
PROBLEMA - Recibo el error 404 para - project-title / j_spring_security_check URL. y cuando trato de depurar, no entra en absoluto en los métodos del controlador. ¿Debo usar algunos filtros o algo más para este propósito?
He visto SpringSecurity: siempre redirigir a los usuarios registrados a una página y Cómo procesar un inicio de sesión de formulario usando Spring Security / Spring MVC . Pero no pude lograr mi objetivo.
Soy nuevo en la seguridad de primavera y necesito ayuda para avanzar en la dirección correcta.
- Gracias
Escriba su propio AuthenticationSuccessHandler y LogoutSuccessHandler .
Ejemplo:
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"
/>
AutenticaciónSuccessHandler
@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);
}
}
Cerrar sesiónSuccessHandler
@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);
}
}
Puede asignar una URL de destino predeterminada en su asignación como
<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"/>
Cuando el usuario se autentica, es el momento en que el usuario accedió a su sistema. Realice una actualización a través de DAO en la tabla de usuarios con fecha y hora actuales. Proceso simple y listo.