文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页网页设计经验技巧 → spring-security3配置和使用详解

spring-security3配置和使用详解

时间:2011/2/11 11:57:17来源:本站原创作者:佚名我要评论(0)

 最近项目中要使用到spring-security,在这里把自己的心得发下,希望对没有接触过想接触的朋友有帮助。

1、在spring-security官网下载最新jar然后拷贝jar到项目的lib下。
2、在classpath下添加security配置文件,例如applicationContext-security.xml.网上现在大多都是2.0的schema. 要根据自己使用的版本而定.下面是3.0的schema.

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.0.xsd  
    http://www.springframework.org/schema/security  
    http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 
 
</beans:beans> 
<?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.0.xsd
 http://www.springframework.org/schema/security
 http://www.springframework.org/schema/security/spring-security-3.0.xsd">
</beans:beans>


3、然后在web.xml中添加配置,内容如下:

Xml代码
<!-- spring security  --> 
        <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value> 
            classpath*:/applicationContext*.xml  
        </param-value> 
    </context-param> 
 
    <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> 
    <listener> 
        <listener-class> 
            org.springframework.web.context.ContextLoaderListener  
        </listener-class> 
    </listener> 
<!-- spring security  -->
        <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   classpath*:/applicationContext*.xml
  </param-value>
 </context-param>
 <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>
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>

 配置起来很简单,由于我的security是整合到现有项目中的.一些jar可能已经存在. 单独做demo的朋友配置的时候可能会出现问题.

本想分开发挣点积分..但怕大家看起来累.. 就发到一起吧.. (*^__^*)

使用篇

1、建立login.jsp页面.内容如下:

Html代码
<form action="<%=path %>/j_spring_security_check" method="post"> 
        USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/> 
        PASSWORD:<input type="password" name="j_password" value="" /><br/> 
        <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br/> 
        <input type="submit">       
    </form> 
<form action="<%=path %>/j_spring_security_check" method="post">
     USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>
     PASSWORD:<input type="password" name="j_password" value="" /><br/>
     <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br/>
  <input type="submit">   
    </form>

 

j_spring_security_check : 为security验证中心(不知道怎么说合适.暂时这么理解吧..).
j_username: 验证用户名;
j_password: 验证密码;
${sessionScope['SPRING_SECURITY_LAST_USERNAME']}:使用最后一次登录用户名.
_spring_security_remember_me:记住我...

2、xml配置,配置内容如下:

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.0.xsd  
    http://www.springframework.org/schema/security  
    http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 
 
    <!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).   
        access-denied-page:出错后跳转到的错误页面;  
    --> 
    <http auto-config="true" access-denied-page="/common/403.jsp"> 
        <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 --> 
        <intercept-url pattern="/index.jsp" access="ROLE_USER" /> 
        <intercept-url pattern="/login.jsp" filters="none" /> 
        <intercept-url pattern="/common/**" filters="none" /> 
        <intercept-url pattern="/script/**" filters="none" /> 
        <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" /> 
        <intercept-url pattern="/user.jsp" access="ROLE_USER" /> 
          
        <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. --> 
        <!-- id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号  error-if-maximum-exceeded="true" 禁止2次登陆;  
            session-fixation-protection="none" 防止伪造sessionid攻击. 用户登录成功后会销毁用户当前的session.  
            创建新的session,并把用户信息复制到新session中.  
         --> 
        <session-management session-fixation-protection="none"> 
            <concurrency-control/> 
        </session-management> 
          
        <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 --> 
        <form-login login-page="/login.jsp" 
            authentication-failure-url="/common/403.jsp" 
            default-target-url="/admin.jsp" /> 
        <!-- logout-success-url:成功注销后跳转到的页面; --> 
        <logout logout-success-url="/login.jsp"/> 
        <http-basic /> 
          
    </http> 
 
    <!--   
    连接池.我spring配置文件中配的有.所以这里就注掉了.  
    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">   
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>   
        <beans:property name="url" value="jdbc:mysql://localhost/demo"/>   
        <beans:property name="username" value="root"/>   
        <beans:property name="password" value="root"/>   
    </beans:bean>   
     --> 
 
    <!-- 权限管理操作 --> 
    <authentication-manager> 
        <authentication-provider> 
            <!--   
            密码加密方式. 常用的有md5 和 sha.   
            salt-source:忘记了.. 手头api关了,网速卡就不上网查了. 类似在md5上又加了一层. 放置暴力破解. 追加安全性.  
            <password-encoder hash="md5"> 
                <salt-source user-property="username"/> 
            </password-encoder> 
             --> 
             <!-- 注入dataSource验证数据库中的用户名.密码.账号状态.和权限相关; --> 
            <jdbc-user-service data-source-ref="dataSource" 
                users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1" 
                authorities-by-username-query="select u.username,r.name from user u join user_role ur on u.uid = ur.uid join role r on r.rid = ur.rid where u.username = ?" /> 
            <!--  
                使用固定的用户名和密码及权限来做验证.   
                <user-service> 
                <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> 
                <user name="user" password="user" authorities="ROLE_USER" /> 
                </user-service> 
            --> 
        </authentication-provider> 
    </authentication-manager> 
    <!--  
        <beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" /> 
    --> 
      
    <!--   
        此配置只是自己学习的一个小demo. 数据库也建的比较随意 比较简单. 使用的是角色权限. 个人比较推荐组权限来控制.. (由于工作经验限制,此处为个人理解)  
        我的库如下:  
        user:username\password\enabled  
        role:name\desc  
        user_role:uid\rid  
     --> 
</beans:beans> 
<?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.0.xsd
 http://www.springframework.org/schema/security
 http://www.springframework.org/schema/security/spring-security-3.0.xsd">
 <!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).
  access-denied-page:出错后跳转到的错误页面;
 -->
 <http auto-config="true" access-denied-page="/common/403.jsp">
  <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 -->
  <intercept-url pattern="/index.jsp" access="ROLE_USER" />
  <intercept-url pattern="/login.jsp" filters="none" />
  <intercept-url pattern="/common/**" filters="none" />
  <intercept-url pattern="/script/**" filters="none" />
  <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
  <intercept-url pattern="/user.jsp" access="ROLE_USER" />
  <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. -->
  <!-- id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号  error-if-maximum-exceeded="true" 禁止2次登陆;
   session-fixation-protection="none" 防止伪造sessionid攻击. 用户登录成功后会销毁用户当前的session.
   创建新的session,并把用户信息复制到新session中.
   -->
  <session-management session-fixation-protection="none">
   <concurrency-control/>
  </session-management>
  <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 -->
  <form-login login-page="/login.jsp"
   authentication-failure-url="/common/403.jsp"
   default-target-url="/admin.jsp" />
  <!-- logout-success-url:成功注销后跳转到的页面; -->
  <logout logout-success-url="/login.jsp"/>
  <http-basic />
 </http>
 <!--
 连接池.我spring配置文件中配的有.所以这里就注掉了.
 <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <beans:property name="url" value="jdbc:mysql://localhost/demo"/>
        <beans:property name="username" value="root"/>
        <beans:property name="password" value="root"/>
    </beans:bean>
  -->
 <!-- 权限管理操作 -->
 <authentication-manager>
  <authentication-provider>
   <!--
   密码加密方式. 常用的有md5 和 sha.
   salt-source:忘记了.. 手头api关了,网速卡就不上网查了. 类似在md5上又加了一层. 放置暴力破解. 追加安全性.
   <password-encoder hash="md5">
    <salt-source user-property="username"/>
   </password-encoder>
    -->
    <!-- 注入dataSource验证数据库中的用户名.密码.账号状态.和权限相关; -->
   <jdbc-user-service data-source-ref="dataSource"
    users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1"
    authorities-by-username-query="select u.username,r.name from user u join user_role ur on u.uid = ur.uid join role r on r.rid = ur.rid where u.username = ?" />
   <!--
    使用固定的用户名和密码及权限来做验证.
    <user-service>
    <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
    <user name="user" password="user" authorities="ROLE_USER" />
    </user-service>
   -->
  </authentication-provider>
 </authentication-manager>
 <!--
  <beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" />
 -->
 <!--
  此配置只是自己学习的一个小demo. 数据库也建的比较随意 比较简单. 使用的是角色权限. 个人比较推荐组权限来控制.. (由于工作经验限制,此处为个人理解)
  我的库如下:
  user:username\password\enabled
  role:name\desc
  user_role:uid\rid
  -->
</beans:beans>


以上配置结束后可以完成用户登录\权限验证等操作.
配置和使用到这里就结束了. 今天下午的小心得.. spring-security很强大. 在这里感谢family168的在线帮助. 谢谢.. 希望对没有接触过spring-security的朋友有所帮助.

相关视频

    没有数据

相关阅读 Springtomize3支持8.3吗 springtomize3 ios8.3能用吗Springtomize3教程 Springtomize3怎么用spring forword!苹果3月9日春季发布会iphone隐藏桌面分页点方法RespringCacheFix清理iphone注销后产生的垃圾文件springtomize重新自定义的系统设置及功能增强springtomize调色温的问题springtomize2一秒钟变iphone5

文章评论
第 1 楼 广东东莞 客人 发表于: 2011/4/22 15:11:00
1

支持( 0 ) 盖楼(回复)

查看所有0条评论>>

发表评论

热门文章 Wordpress本地安装教程dx1.5如何设置二级域名

最新文章 hbuilder有哪些快捷键Wordpress本地安装教程 Wordpress本地安装教程expression web 4文档乱码解决方法dz 2.5“收藏本版”关闭小对话框无法关闭解在制作安装软件之前,您必须先将易语言存盘,

人气排行 如何使用multipart/form-data格式上传文件Photoshop PS图层混合模式详解(非常详细)ISAPI_Rewrite3使用教程网站里添加收藏和设为首页代码桌面快捷方式图标不见了C#获取执行程序所在的当前路径的方法详解(XMLHttpRequest)进行跨域请求方法如何用远程桌面连接进行传输文件