tutorial java authentication login shiro

java - tutorial - ¿Cómo puedo redireccionar las solicitudes a un loginUrl Shiro configurado si el usuario ya está autenticado?



apache shiro vs spring security (2)

Podría manejar la solicitud de inicio de sesión usted mismo o usar su marco, tendría que cambiar su shiro.ini para usar un filtro PassThruAuthenticationFilter

authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter

Ahora puede verificar si el usuario está conectado y redirigir si es verdadero:

Subject currentUser = SecurityUtils.getSubject(); if(currentUser.isAuthenticated()){ //redirect }else{ AuthenticationToken token = new UsernamePasswordToken(username, password); currentUser.login(token); WebUtils.redirectToSavedRequest(request, response, "index.xhtml"); }

Esta no es una solución totalmente automática. No estoy seguro si puede obtener la URL de éxito fuera de la autenticación, puede redirigir manualmente WebUtils.issueRedirect(req, resp, url)

Tengo una aplicación web usando Shiro para la autenticación. Las partes relevantes de web.xml y shiro.ini son:

<listener> <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> </listener> <filter> <filter-name>ShiroFilter</filter-name> <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> </filter> <filter-mapping> <filter-name>ShiroFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>

y

[main] authc.loginUrl = /authoring/login.html authc.successUrl = /authoring logout.redirectUrl = /authoring/login.html [users] foo = foo [urls] /authoring/logout = logout /authoring/** = authc

Shiro intercepta correctamente todas las solicitudes de clientes no autenticados y redirige a la entrada de inicio de sesión configurada (y luego las reenvía a la página solicitada después de la autenticación exitosa). Lo que me gustaría que sucediera es que, si un cliente autenticado realiza una solicitud explícita a /authoring/login.html, redirija eso a / authoring. Esto SÓLO sucederá si el cliente está autenticado.

Por ejemplo, piense en cómo funciona Gmail: al intentar acceder a mail.google.com (o incluso a https://accounts.google.com/ServiceLogin ) cuando ya inició sesión, se le redirige a la bandeja de entrada. ¿Es esto posible con Shiro fuera de la caja? Si no, ¿cuál es la forma correcta de implementarlo?


Encontré el mismo problema y lo solucioné convirtiendo la página de inicio de sesión en un JSP y agregando una redirección al principio:

<% if (SecurityUtils.getSubject().isAuthenticated()) { response.sendRedirect(request.getContextPath()); } %>