userdetails userbuilder tutorial example authenticationmanagerbuilder java spring security struts2 spring-security

java - userbuilder - Cómo integrar Spring Security y Struts2



userdetailsservice spring security 4 (2)

He hecho muchas búsquedas en Google sobre este tema y hasta ahora no pude encontrar ningún tutorial sobre la integración de Struts2 y Spring Security.

Mi pregunta es ¿cómo integraría Spring Security y Struts2?

Cuando quiero restringir ciertas acciones o páginas, como que un administrador solo debe acceder a la página / url de administración, y otras cosas como esas, si un usuario intenta acceder a esa página, será redireccionado a otra página.


Digamos que necesitas asegurar lo que está accesible en la ruta /admin/* . Debe declarar el filtro Spring Security en su web.xml , el filtro Struts debe aparecer después de manera que si está accediendo a /admin será Spring Security quien maneje la solicitud primero y podrá dejarla pasar o bloquearla dependiendo de en el papel del usuario:

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/admin/*</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Luego declaras tu contexto de seguridad primaveral:

<http> <intercept-url pattern="/*" filters="none" /> <intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <form-login login-page="/login" /> <logout logout-url="/logout" /> </http>

Propongo que use el plugin struts2-convention para que las URL como /login se unan automáticamente a una clase llamada com.foo.bar.actions.LoginAction . Lo mismo para LogoutAction

Ahora, lo que está bajo /admin/* debe ser asegurado por Spring Security, y el resto debe enviarse directamente al filtro Struts2.

Finalmente, en su JSP puede verificar si alguien es un administrador con:

<sec:authorize access="hasRole(''ROLE_ADMIN'')"> <p>you are an admin</p> </sec:authorize>

El resto se puede encontrar en cualquier tutorial de Spring Security. Lo que es realmente importante es el orden de la declaración de los filtros, la seguridad primaveral debe ser lo primero.

Editar: buscando en google, también hay este enlace que puede ser de ayuda para usted.


Esto es realmente muy simple: Spring Security es agnóstico en el marco web :)

Debe definir la cadena de filtros de Spring Security; este es un filtro de Java que debe asignarse a todas las solicitudes. El filtro verificará si la ruta requiere privilegios y, si es así, verifica si el usuario está conectado y tiene esos privilegios.

Ejemplo de configuración simple.

web.xml (inserte en su existente, junto con la configuración de struts):

<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:META-INF/spring/applicationContext-security.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Configuración de seguridad de Spring (en el archivo mencionado en web.xml en el parámetro contextConfigLocation):

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http pattern="/js/**" security="none" /> <http pattern="/css/**" security="none" /> <http pattern="/images/**" security="none" /> <http auto-config="false" use-expressions="true"> <http-basic/> <intercept-url pattern="/**" access="hasRole(''ROLE_USER'')" /> <session-management session-fixation-protection="newSession" /> </http> </beans:beans>

Puede extender esto como lo desee; la documentación de Spring está bastante bien escrita

Puede ir a lo largo de una configuración automática aún más simple:

<http auto-config=''true''> <intercept-url pattern="/**" access="ROLE_USER" /> </http>

Las opciones anteriores protegen su aplicación web por ruta de solicitud. Es posible que desee asegurar las acciones también. Agregar el siguiente lo pondría en marcha:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class = "true" />

Déjame saber qué características necesitas y puedo señalarte una dirección. Tenga en cuenta que la configuración del espacio de nombres no es una bala de plata; si necesita una solución muy personalizada, es posible que deba configurar todos los beans de primavera, pero la documentación lo explica muy bien.