http://my.oschina.net/BeyondBit/blog/64465
——————————————————————————————————————————————————————————————
注意版本问题:那个老外讲说是spring 3.0整合spring security 3.0是没问题的!而spring 2.5只能与spring security 2的版本集成!
——————————————————————————————————————————————————————————————
好吧!在这个夜深人静的时候,既然没有睡意,那就刚好整理一个我的博文,osc挺好的,以后技术博文就在这里整理了!前几天因为项目需求spring security 机制,所以就自己研究了一下,到官方下载了spring security 3.0的!spring security 是一个非常好的安全管理机制!有兴趣的可以自己下去慢慢研究!至于spring security介绍等等,这里我就不再赘述了,大家自己google各种的资料都有讲的!不过我在学习期间发现大家都是自己整理的博文挺好的,但是都是关于spring security 的单个项目!没有讲过SSH集成spring security!更有可恨的人士竟然把自己的标题命名为SSH集成spring security !然后当我google出来时百度文库的,看着看着就是只讲到了!spring security!没有讲集成!最后一句话看完我才知道是坑爹货!“本文没有讲SSH如何集成spring security,只讲了spring security!因为这样容易被人搜到下载,只为赚取积分!”。这让我想到了,这些误人子弟的前辈们!哎~~~算了不批鸟!我们言归正传!不过也算是我学习经历吧!
这里我分享我自己的学习历程,个人观点,仅供参考!如有错误之处还请指教!如有雷同纯属巧合!好了不扯了!开始!
首先,我当时用ssh集成spring security 3.0的时候总是报一个错误,告诉我版本不能兼容!我搞不明白,不知道哪里不兼容!后来google到一篇老外的文章才发现是,spring 2.5不能喝spring security 3.0集成的!当时我乃个蛋疼啊!因为框架是架构师打出来的,只知道让我集成spring security搞了半天他用的是spring 2.5!整死我了!看那个老外讲说是spring 3.0整合spring security 3.0是没问题的!而spring 2.5只能与spring security 2的版本集成!(老外就是好啊!还是要感谢他要不是他我不知道,我那个问题神马时候才能解决!)
其实后来为了验证这一点,我用myeclipse自带的ssh集成了spring security 3结果成功了!(但是当中出现了一个小的bug,就是spring 3+spring security 3,集成我之久数据层的时候它总是报一个nullpointexception ,我测试就dao层不能通过!出于工作紧急,我就没时间再解决了!bug尚未解决!待解决后再发!)那就说明他讲的是对的!然后我下载spring security 2.0.7的和spring 2.5集成!最后测试通过!完全成功!同时hibernate持久数据库也正确无误!
好了现在讲完了!开始贴代码!这里只讲的是SS2H集成spring security2.0.7至于你采用哪种授权方式安全机制就是你自己设置了,为了简单理解建立框架我就简单配置实现!
1.web.xml 配置.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
<!-- default: /WEB-INF/applicationContext.xml -->
</listener>
<!-- Character Encoding filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sf</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--这里必须注意一下,就是spring security 钩子,大家都叫钩子,我也就这么叫了!就是监听拦截你请求的,这个呢必须要放到struts 拦截监听的前面!否则spring security 管理不上的! -->
<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>
<!-- Struts2 filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.applicationContext-security.xml 配置!这里你要是实现过spring security的单独项目那就基本没问题了!
这里的头信息需要说明一下,我是从官方文档中copy的!也就是spring security 2.0.7版本的配置!以后的版本
会略微有差别的!
<?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-2.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<http auto-config="true"> <!--这是spring 提供的http/https信道安全的这个是重要的!你的请求信道是安全的!-->
<!-- <intercept-url pattern="/register.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> -->
<!--释放用户登陆page 允许任何人访问该页面 -->
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<!-- 为角色添加角色资源 -->
<intercept-url pattern="/user.jsp" access="ROLE_USER"/>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
<!-- 配置用户正常访问page -->
<intercept-url pattern="/**" access="ROLE_USER"/>
<!-- 自定义用户登陆page default-target-url登陆成功跳转的page ,authentication-failure-url="/login.jsp?error=true"这里是登陆失败跳转的page-->
<form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?error=true"/>
<!-- 记住密码-->
<remember-me/>
</http>
<!--这里需要注意下一spring security3.0 版本中配置是 authentication-manger 里面配置 authentication-provider 而spring security 2.5版本去掉了外围的manger!版本升级功能增强,所以这都是注意的地方!-->
<authentication-provider>
<user-service>
<!-- 配置登陆用户authorities 配置用户的角色权限 -->
<user name="dobby" password="dobby" authorities="ROLE_USER,ROLE_ADMIN" />
<user name="xi" password="xi" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</beans:beans>
3.以上两点只要配置正确,接下来就是加入jar了下载好你的jar,copy到lib即可!
4.基本结构:
5.要想深入spring security 推荐大家看官方里面有文档!
总结:其实集成这些框架没什么复杂的东西要将,最关键的就是版本之间的兼容问题,你在搭建框架之前必须熟知那个版本之间能兼容,那个不能!这样搭建不会走很多弯路!其次就是你要配置正确!建议最好到官方找答案!好了,没什么技术含量!希望给后来的一点经验!少走弯路吧!因为我发现网上没有人发表过这样的文章!基本讲的对新手来说还是不容易理解!