转:struts+spring+hibernate 整合spring security

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 推荐大家看官方里面有文档!

        总结:其实集成这些框架没什么复杂的东西要将,最关键的就是版本之间的兼容问题,你在搭建框架之前必须熟知那个版本之间能兼容,那个不能!这样搭建不会走很多弯路!其次就是你要配置正确!建议最好到官方找答案!好了,没什么技术含量!希望给后来的一点经验!少走弯路吧!因为我发现网上没有人发表过这样的文章!基本讲的对新手来说还是不容易理解!

————————————————————————————————————————————————————————————————
——————————————————————————————————
傲轩游戏网
原文地址:https://www.cnblogs.com/cuizhf/p/2630496.html