zoukankan      html  css  js  c++  java
  • 转: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 推荐大家看官方里面有文档!

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

    ————————————————————————————————————————————————————————————————
    ——————————————————————————————————
    傲轩游戏网
  • 相关阅读:
    asp.net mvc在Model中控制日期格式
    MVC3.0删除数据的时候给提示信息
    Jquery的鼠标移动上去显示div,鼠标离开的时候隐藏div效果
    数据库的日志数据库(_log.ldf)文件太大,如何压缩
    如何在加载数据的时候给一个等待动画
    Div内部的内容超出部分显示省略号(仅仅只有一行内容)
    IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    如何用Jquery判断在键盘上敲的哪个按键
    Split()的简单的用法
    oracle AWR报告
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2630496.html
Copyright © 2011-2022 走看看