zoukankan      html  css  js  c++  java
  • springsecurity3 配置和使用.

    最近项目中要使用到spring-security,闲来没事就研究了下。发现入门挺简单的,在这里把自己的心得发下,希望对没有接触过想接触的朋友有帮助。

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

    Xml代码 复制代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2.  <beans:beans xmlns="http://www.springframework.org/schema/security"  
    3.     xmlns:beans="http://www.springframework.org/schema/beans"  
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
    7.     http://www.springframework.org/schema/security   
    8.     http://www.springframework.org/schema/security/spring-security-3.0.xsd">  
    9.   
    10.  </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代码 复制代码
    1. <!-- spring security  -->  
    2.         <context-param>  
    3.         <param-name>contextConfigLocation</param-name>  
    4.         <param-value>  
    5.             classpath*:/applicationContext*.xml   
    6.         </param-value>  
    7.     </context-param>  
    8.   
    9.     <filter>  
    10.         <filter-name>springSecurityFilterChain</filter-name>  
    11.         <filter-class>  
    12.             org.springframework.web.filter.DelegatingFilterProxy   
    13.         </filter-class>  
    14.     </filter>  
    15.     <filter-mapping>  
    16.         <filter-name>springSecurityFilterChain</filter-name>  
    17.         <url-pattern>/*</url-pattern>  
    18.     </filter-mapping>  
    19.     <listener>  
    20.         <listener-class>  
    21.             org.springframework.web.context.ContextLoaderListener   
    22.         </listener-class>  
    23.     </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代码 复制代码
    1. <form action="<%=path %>/j_spring_security_check" method="post">  
    2.         USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>  
    3.         PASSWORD:<input type="password" name="j_password" value="" /><br/>  
    4.         <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br/>  
    5.         <input type="submit">        
    6.     </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代码 复制代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2.  <beans:beans xmlns="http://www.springframework.org/schema/security"  
    3.     xmlns:beans="http://www.springframework.org/schema/beans"  
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
    7.     http://www.springframework.org/schema/security   
    8.     http://www.springframework.org/schema/security/spring-security-3.0.xsd">  
    9.   
    10.     <!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).    
    11.         access-denied-page:出错后跳转到的错误页面;   
    12.     -->  
    13.     <http auto-config="true" access-denied-page="/common/403.jsp">  
    14.         <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 -->  
    15.         <intercept-url pattern="/index.jsp" access="ROLE_USER" />  
    16.         <intercept-url pattern="/login.jsp" filters="none" />  
    17.         <intercept-url pattern="/common/**" filters="none" />  
    18.         <intercept-url pattern="/script/**" filters="none" />  
    19.         <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />  
    20.         <intercept-url pattern="/user.jsp" access="ROLE_USER" />  
    21.            
    22.         <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. -->  
    23.         <!-- id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号  error-if-maximum-exceeded="true" 禁止2次登陆;   
    24.             session-fixation-protection="none" 防止伪造sessionid攻击. 用户登录成功后会销毁用户当前的session.   
    25.             创建新的session,并把用户信息复制到新session中.   
    26.          -->  
    27.         <session-management session-fixation-protection="none">  
    28.             <concurrency-control/>  
    29.         </session-management>  
    30.            
    31.         <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 -->  
    32.         <form-login login-page="/login.jsp"  
    33.             authentication-failure-url="/common/403.jsp"  
    34.             default-target-url="/admin.jsp" />  
    35.         <!-- logout-success-url:成功注销后跳转到的页面; -->  
    36.         <logout logout-success-url="/login.jsp"/>  
    37.         <http-basic />  
    38.            
    39.     </http>  
    40.   
    41.     <!--    
    42.     连接池.我spring配置文件中配的有.所以这里就注掉了.   
    43.     <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">    
    44.         <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>    
    45.         <beans:property name="url" value="jdbc:mysql://localhost/demo"/>    
    46.         <beans:property name="username" value="root"/>    
    47.         <beans:property name="password" value="root"/>    
    48.     </beans:bean>    
    49.      -->  
    50.   
    51.     <!-- 权限管理操作 -->  
    52.     <authentication-manager>  
    53.         <authentication-provider>  
    54.             <!--    
    55.             密码加密方式. 常用的有md5 和 sha.    
    56.             salt-source:忘记了.. 手头api关了,网速卡就不上网查了. 类似在md5上又加了一层. 放置暴力破解. 追加安全性.   
    57.             <password-encoder hash="md5">  
    58.                 <salt-source user-property="username"/>  
    59.             </password-encoder>  
    60.              -->  
    61.              <!-- 注入dataSource验证数据库中的用户名.密码.账号状态.和权限相关; -->  
    62.             <jdbc-user-service data-source-ref="dataSource"  
    63.                 users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1"  
    64.                 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 = ?" />  
    65.             <!--   
    66.                 使用固定的用户名和密码及权限来做验证.    
    67.                 <user-service>  
    68.                 <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />  
    69.                 <user name="user" password="user" authorities="ROLE_USER" />  
    70.                 </user-service>  
    71.             -->  
    72.         </authentication-provider>  
    73.     </authentication-manager>  
    74.     <!--   
    75.         <beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" />  
    76.     -->  
    77.        
    78.     <!--    
    79.         此配置只是自己学习的一个小demo. 数据库也建的比较随意 比较简单. 使用的是角色权限. 个人比较推荐组权限来控制.. (由于工作经验限制,此处为个人理解)   
    80.         我的库如下:   
    81.         user:username\password\enabled   
    82.         role:name\desc   
    83.         user_role:uid\rid   
    84.      -->  
    85. </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的朋友有所帮助.

    注:这是我复制别人的 。

  • 相关阅读:
    Spring Cloud云架构
    Spring Cloud云架构
    Spring Cloud云架构
    KafKa集群安装详细步骤
    Spring Cloud云架构
    matlab规定小数点保留4位且非科学计数法格式存储txt
    Test checkout of feature 'Compiler' failed 解决方法(转载)
    摄像机内参相关(3ds max)
    针孔相机模型和变形
    关于Matlab里面的四个取整(舍入)函数:Floor, Ceil, Fix, Round的解释(转)
  • 原文地址:https://www.cnblogs.com/wenxiu/p/1942084.html
Copyright © 2011-2022 走看看