Spring Security教程(一)
来源:互联网 发布:淘宝电脑直通车是什么 编辑:程序博客网 时间:2024/06/05 09:20
一 概要
二 新建一个web maven项目
如果不知道怎么新建web maven项目的请参考我的另一篇博客:http://blog.csdn.net/AirMario/article/details/53954986
新建好项目之后在webapp下添加了两个jsp文件,adminPage.jsp和index.jsp。其中adminPage.jsp只有那些拥有ROLE_ADMIN,ROLE_USER其中一种权限的用户才能访问,而index.jsp只允许那些拥有ROLE_USER权限的用户才能访问。
三 配置过滤器
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>SpringSecurity</display-name><!-- 加载配置文件 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/config/applicationContext*.xml</param-value> </context-param><!-- 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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
四 Spring Security的配置
在WEB-INF/config/下新建applicationContext.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/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"><http auto-config='true'><intercept-url pattern="/adminPage.jsp" access="ROLE_ADMIN" /><intercept-url pattern="/**" access="ROLE_USER" /></http><authentication-manager><authentication-provider><user-service><user name="admin" password="123" authorities="ROLE_USER, ROLE_ADMIN" /><user name="user" password="123" authorities="ROLE_USER" /></user-service></authentication-provider></authentication-manager></beans:beans>说明:
- 文件的头部为,声明在xml中使用Spring Security提供的命名空间。
http部分配置如何拦截用户请求。auto-config='true'将自动配置几种常用的权限控制机制,包括form, anonymous, rememberMe。
利用intercept-url来判断用户需要具有何种权限才能访问对应的url资源,可以在pattern中指定一个特定的url资源,也可以使用通配符指定一组类似的url资源。例子中定义的两个intercepter-url,第一个用来控制对/admin.jsp的访问,第二个使用了通配符/**,说明它将控制对系统中所有url资源的访问。
其实在实际使用中,Spring Security采用的是一种就近原则,就是说当用户访问的url资源满足多个intercepter-url时,系统将使用第一个符合条件的intercept-url进行权限控制。在我们这个例子中就是,当用户访问/admin.jsp时,虽然两个intercept-url都满足要求,但因为第一个intercept-url排在上面,所以Spring Security会使用第一个intercept-url中的配置处理对/adminPage.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/adminPage.jsp。
access指定的权限都是以ROLE_开头的,实际上这与Spring Security中的Voter机制有着千丝万缕的联系,只有包含了特定前缀的字符串才会被Spring Security处理。目前来说我们只需要记住这一点就可以了。
user-service中定义了两个用户,admin和user。为了简便起见,我们使用明文定义了两个用户对应的密码,这只是为了当前演示的方便,之后的例子中我们会使用Spring Security提供的加密方式,避免用户密码被他人窃取
最重要的部分是authorities,这里定义了这个用户登陆之后将会拥有的权限,它与上面intercept-url中定义的权限内容一一对应。每个用户可以同时拥有多个权限,例子中的admin用户就拥有ROLE_ADMIN和ROLE_USER两种权限,这使得admin用户在登陆之后可以访问ROLE_ADMIN和ROLE_USER允许访问的所有资源。与之对应的是,user用户就只拥有ROLE_USER权限,所以他只能访问ROLE_USER允许访问的资源,而不能访问ROLE_ADMIN允许访问的资源。
五 pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zmc</groupId><artifactId>SpringSecurityDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>SpringSecurityDemo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java-version>1.7</java-version><org.springframework-version>3.2.2.RELEASE</org.springframework-version><org.aspectj-version>1.6.10</org.aspectj-version><org.slf4j-version>1.6.1</org.slf4j-version></properties><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><!-- Spring security --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>3.1.4.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>3.1.3.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>3.1.3.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId><version>3.1.3.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>3.1.3.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies></project>这样一个项目就构建完成了,部署到tomcat进行测试。
六 结果
- Spring Security教程(一)
- 《Spring Security教程系列》一.Spring Security简介
- Spring Cloud Security系列教程一:入门
- spring security详解教程
- spring security 教程入门
- spring security教程
- Spring Security教程
- Spring Security教程目录
- Spring Security教程(二)
- Spring Security教程(三)
- Spring Security教程(四)
- Spring Security教程(五)
- Spring Security教程(六)
- Spring Security教程(七)
- Spring Security教程
- spring security教程
- spring security(一)
- spring security一
- C语言中将逻辑算法符合改写成英语拼写的方法:iso646.h头文件
- 结构型设计模式(二)(外观模式,享元模式,代理模式)
- 开放android root 权限
- 写在2016年的最后一天
- Android SimpleAdapter
- Spring Security教程(一)
- pyspider 中文简介
- 未完待续
- 局域网内如何连接MYSQL数据库
- 字符串的操作函数
- 程辑包‘installr’是用R版本3.3.2 来建造的解决方法
- Android怎么传递数据到mysql,然后listview会刷新数据
- 了解CSS overflow属性
- 一个数组中只有两个数字是出现一次的,其他数字都是成对出现,找出这两个数字