我已经做了谷歌搜索吨关于这个问题,然后到现在我也找不到关于整合的Struts2和Spring Security的任何教程。
我的问题是,如何将整合春季安全和Struts2的?
当我想某些动作或页面加以限制,如管理页面/ URL应该只能由管理员和类似的其他事情,如果用户试图访问该页面,他或她将被重定向到另一个页面访问。
我已经做了谷歌搜索吨关于这个问题,然后到现在我也找不到关于整合的Struts2和Spring Security的任何教程。
我的问题是,如何将整合春季安全和Struts2的?
当我想某些动作或页面加以限制,如管理页面/ URL应该只能由管理员和类似的其他事情,如果用户试图访问该页面,他或她将被重定向到另一个页面访问。
比方说,你需要保护什么是上访问/admin/*
路径。 你需要声明你的春季安全过滤器web.xml
,Struts的过滤器要来后,因此,如果您正在访问/admin
这将是春季安全,首先处理请求,将能够让它通过或阻止它取决于用户的角色:
<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>
然后,声明你春季安全上下文:
<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>
我建议你使用struts2-convention
插件,让喜欢的网址/login
自动绑定到一个名为假设类com.foo.bar.actions.LoginAction
。 同为LogoutAction
现在是什么在/admin/*
应该由Spring Security的固定,其余应直接转发到Struts2的过滤器。
最后,在你的JSP您可以检查是否有人与管理:
<sec:authorize access="hasRole('ROLE_ADMIN')">
<p>you are an admin</p>
</sec:authorize>
其余的可以在任何Spring Security的教程中找到。 什么是真正重要的是过滤器声明的顺序,春季安全必须是第一个。
编辑:搜索对谷歌,也有这个环节 ,可以成为您的帮助。
这其实很简单 - 春季安全是web框架无关:)
您需要定义Spring Security的过滤器链 - 这是应该被映射到所有请求的Java过滤器。 该过滤器将检查路径需要任何的privilages如果是这样,如果检查用户登录并拥有这些的privilages。
设置简单的例子。
web.xml中(插入到现有的,沿着支柱配置):
<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>
春季安全配置(在contextConfigLocation的参数在web.xml中提到的文件中):
<?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>
您可以延长该如你所愿- Spring的文档,而写得很好
您可以沿着一个更简单的自动配置去:
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
上述选项确保每个请求的路径你的web应用程序。 您可能要确保动作为好。 添加下面将让你去:
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class = "true" />
让我知道你需要什么功能,我可以为你指明方向。 请记住,命名空间的配置是不是银弹 - 如果你需要,你可能需要自己配置所有的Spring bean很定制的解决方案,但文档解释了这口井。