`
cleverbing
  • 浏览: 15569 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

spring-security3 配置和使用.

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

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

Xml代码
01.<?xml version="1.0" encoding="UTF-8"?> 
02. <beans:beans xmlns="http://www.springframework.org/schema/security"  03.    xmlns:beans="http://www.springframework.org/schema/beans"  04.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  05.    xsi:schemaLocation="http://www.springframework.org/schema/beans   06.    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
07.    http://www.springframework.org/schema/security  
08.    http://www.springframework.org/schema/security/spring-security-3.0.xsd">  09. 
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代码
01.<!-- spring security  --> 
02.        <context-param>  03.        <param-name>contextConfigLocation</param-name>  04.        <param-value>  05.            classpath*:/applicationContext*.xml  
06.        </param-value>  07.    </context-param>  08. 
09.    <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代码
01.<form action="<%=path %>/j_spring_security_check" method="post"> 
02.        USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>  03.        PASSWORD:<input type="password" name="j_password" value="" /><br/>  04.        <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br/>  05.        <input type="submit">        06.    </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代码
01.<?xml version="1.0" encoding="UTF-8"?> 
02. <beans:beans xmlns="http://www.springframework.org/schema/security"  03.    xmlns:beans="http://www.springframework.org/schema/beans"  04.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  05.    xsi:schemaLocation="http://www.springframework.org/schema/beans   06.    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
07.    http://www.springframework.org/schema/security  
08.    http://www.springframework.org/schema/security/spring-security-3.0.xsd">  09. 
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的朋友有所帮助.

本文来自http://www.cnblogs.com/wenxiu/archive/2011/01/22/1942084.html
分享到:
评论

相关推荐

    spring-security-core-3.1.0.RC1.jar

    Spring Security是Java平台上的一款强大且高度可配置的安全框架,用于解决Web应用和企业级应用的安全需求。在本篇文章中,我们将深入探讨Spring Security的核心库——`spring-security-core-3.1.0.RC1.jar`,以及它...

    spring-security-core-2.0.5.RELEASE.src

    Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全配置等抽象成易于使用的组件。深入理解这个源代码包,有助于开发者构建更安全、更可靠的Java应用程序。...

    spring-web-4.1.3.RELEASE.jar

    spring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jar

    spring-security所需要的jar包,

    开发人员可以使用这些测试类来验证他们的Spring Security配置是否正确,或者进行自定义扩展的单元测试。 4. **spring-security-core-tiger-2.0.5.RELEASE-sources.jar**:这个jar包包含了Spring Security核心组件的...

    spring-security-web源码所需jar包

    1. **spring-context-3.1.2.RELEASE.jar**:提供Spring的IoC(Inversion of Control)容器和AOP(Aspect Oriented Programming)支持,这是Spring框架的基础,为Spring Security提供了配置和事件处理能力。...

    spring-security-3.1.3.RELEASE.jar

    了解这些过滤器的工作方式和它们之间的协作,对于理解和定制Spring Security的防护策略至关重要。 要查看Spring Security 3.1.3.RELEASE的源码,你需要将“SpringSource-spring-security-6cea269”压缩包解压后,将...

    spring-security-core-2.0.6.RELEASE

    在Java Web开发领域,Spring Security是一款广泛使用的安全框架,它为应用程序提供了全面的安全管理解决方案,包括身份验证、授权以及会话管理等关键功能。本文将深入探讨Spring Security的核心模块,并以2.0.6....

    spring-security-material-master.zip

    本资料“spring-security-material-master.zip”显然是一份关于Spring Security的教程材料,特别关注的是在Spring Boot环境下如何配置和使用Spring Security来保护静态资源。 在Spring Boot集成Spring Security时,...

    SpringSecurity3.1.3的jar包

    3. **spring-security-config-3.1.3.RELEASE.jar**:配置模块允许开发者通过XML或Java配置来声明式地定义安全规则。它使用Spring的Bean定义来构建安全配置,包括访问控制、用户细节服务和安全元数据源等。 4. **...

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2是一个广泛使用的Java库,用于在Spring应用程序中实现OAuth2协议,提供安全授权服务。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其私有资源,如在社交媒体上的数据。2.0.3....

    spring security 4.0.0所需jar包

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛用于Java应用程序的安全性管理。这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了...

    togglz-spring-security-1.1.1.Final.zip

    【标题】"togglz-spring-security-1.1.1.Final.zip" 提供的是一个集成 togglz(一个功能开关库)与 Spring Security 的开源项目,版本为 1.1.1.Final。Togglz 主要用于在应用程序中实现特性开关功能,而 Spring ...

    SpringSecurity-Jar包

    在这个"SpringSecurity-Jar包"中,包含了三个核心的jar文件:spring-security-config-4.2.3.RELEASE.jar、spring-security-core-4.2.3.RELEASE.jar以及spring-security-web-4.2.3.RELEASE.jar,它们各自承载了Spring...

    spring-security3.1.4 完整的jar包

    3. **spring-security-config-3.1.4.RELEASE.jar**:配置模块允许开发者使用XML或注解来定义安全规则,如访问控制、角色分配等。它包含了表达式语言,使得在定义访问控制时可以使用自定义逻辑。 4. **spring-...

    acegi-security-tiger-1.0.0-RC2.jar.zip

    Acegi Security是一个已退役的安全框架,它为Java平台上的Spring框架提供了全面的身份验证和...因此,尽管Acegi Security在某些老项目中仍可能被使用,但新的开发工作应转向Spring Security,以获取更好的维护和更新。

    spring-expression-3.2.1.RELEASE.zip

    描述中提到的"summer-security.zip"可能是一个错误,因为通常情况下,"Spring Security"是一个广泛使用的Java Web应用程序的身份验证和授权库。Spring Security提供了一套全面的解决方案来保护Web应用,包括登录认证...

    spring-security Jar包

    Spring Security 3.0.5.RELEASE版本可能使用的是XML配置,而在后续版本中,更倾向于使用Java配置API,使得配置更加直观和简洁。 10. **安全性测试**:Spring Security 提供了专门的测试支持,帮助开发者编写单元...

    官方原版spring-framework-4.3.18.RELEASE.zip

    这些架构文件定义了Spring XML配置中可以使用的元素和属性,帮助开发者编写正确的配置,确保XML配置文件的语法正确。 Spring Framework支持多种开发模式,比如模型-视图-控制器(Model-View-Controller,MVC)架构...

    Spring-Security-Demo-master.zip

    在IT领域,Spring Security和Spring Boot是两个极为重要的组件,它们为开发者提供了强大的安全管理和应用程序构建能力。本篇将详细讲解如何将Spring Security集成到Spring Boot项目中,以及涉及到的相关知识点。 一...

Global site tag (gtag.js) - Google Analytics