Spring security 认证-ch01
来源:互联网 发布:淘宝上做什么产品好 编辑:程序博客网 时间:2024/04/30 18:51
在写这篇文章前,在网上找了很多springsecurity方面的资料,包括它的官方文档,发现其实例子都蛮多的,但是很多例子都写的极其复杂,对以一个初学者来说还是很难看得懂得,所以本人抽点时间来写了一些例子,从简单到复杂。只希望通过本文使大家对springsecurity有大概的了解,在以后可能用到时,有所帮助。
一.创建项目和导入jar包,项目结构图如下:
二.首先第一件事情是你需要增加下面的过滤器声明到你的web.xml 文件:
<!-- 配置Spring -->
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>springSecurityFilterChain</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 加载xml文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext.xml
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- 监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这提供了一个钩子到Spring安全的Web基础架构。你然后准备开始编辑您的应用程序方面的文件Web 安全服务的配置使用<http>元素。
从这个配置中,可能会给我们造成一个错觉,以为DelegatingFilterProxy类就是springSecurity的入口,但其实这个类位于spring-web-2.5.4.jar这个jar下面,说明这个类本身是和springSecurity无关。DelegatingFilterProxy是一个Spring Framework的类,它可以代理一个application context中定义的Spring bean所实现的filter。
三.applicationContext.xml配置安全信息
(1)Spring Security提供的命名空间
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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.1.xsd">
</beans:beans>
说明:声明在xml中使用Spring Security提供的命名空间
(2)<http>配置
<http auto-config='true'>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
说明: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中的配置处理对/admin.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/admin.jsp
(3)配置鉴定用户
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
说明: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允许访问的资源
四。创建admin.jsp和index.jsp页面
admin.jsp页面信息如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>admin</title>
</head>
<body>
<a href="admin.jsp">admin.jsp</a>
<a href="index.jsp">index.jsp</a>
</body>
</html>
index.jsp页面信息如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="/login/login.js"></script>
<title>index</title>
</head>
<body>
<a href="admin.jsp">admin.jsp</a>
<a href="index.jsp">index.jsp</a>
</body>
</html>
启动运行效果如下图:
一.创建项目和导入jar包,项目结构图如下:
二.首先第一件事情是你需要增加下面的过滤器声明到你的web.xml 文件:
<!-- 配置Spring -->
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>springSecurityFilterChain</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 加载xml文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext.xml
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- 监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这提供了一个钩子到Spring安全的Web基础架构。你然后准备开始编辑您的应用程序方面的文件Web 安全服务的配置使用<http>元素。
从这个配置中,可能会给我们造成一个错觉,以为DelegatingFilterProxy类就是springSecurity的入口,但其实这个类位于spring-web-2.5.4.jar这个jar下面,说明这个类本身是和springSecurity无关。DelegatingFilterProxy是一个Spring Framework的类,它可以代理一个application context中定义的Spring bean所实现的filter。
三.applicationContext.xml配置安全信息
(1)Spring Security提供的命名空间
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
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.1.xsd">
</beans:beans>
说明:声明在xml中使用Spring Security提供的命名空间
(2)<http>配置
<http auto-config='true'>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
说明: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中的配置处理对/admin.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/admin.jsp
(3)配置鉴定用户
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
说明: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允许访问的资源
四。创建admin.jsp和index.jsp页面
admin.jsp页面信息如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>admin</title>
</head>
<body>
<a href="admin.jsp">admin.jsp</a>
<a href="index.jsp">index.jsp</a>
</body>
</html>
index.jsp页面信息如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="/login/login.js"></script>
<title>index</title>
</head>
<body>
<a href="admin.jsp">admin.jsp</a>
<a href="index.jsp">index.jsp</a>
</body>
</html>
启动运行效果如下图:
这个简陋的页面是Spring Security自动生成的,一来为了演示的方便,二来避免用户自己编写登录页面时犯错,Spring Security为了避免可能出现的风险,连测试的登录页面都自动生成出来了。在这里我们就省去编写登录页面的步骤,直接使用默认生成的登录页面进行演示。
后续章节会使用自己创建的登录页面。
从简单到复杂化。
- Spring security 认证-ch01
- Spring Security-认证
- spring security LDAP 认证
- spring security 数据认证
- spring security认证
- Spring Security-Ldap认证配置
- Spring security 认证-列子(1)
- spring-security用户权限认证框架
- Spring Security 实现身份认证
- 4. Spring Security 认证简介
- Spring security安全认证框架
- Spring security +Hibernate+UserDetailsService认证
- spring security登陆认证demo
- spring security 自定义认证登录
- Spring Security-Ldap认证(LdapAuthenticationProvider)
- Spring Security初体验--使用LDAP认证
- Spring security认证与授权(一)
- Spring security认证与授权(二)
- Visual Studio 新建网站和新建项目区别
- Linux 开机引导与关机过程
- Haskell是个神码语言
- C++ Primer 学习笔记(4)——标准库string类型
- Scrollbars & Scrolling
- Spring security 认证-ch01
- A handy Perl script to calculate duration in seconds
- 基于mini2440的USB视频采集
- shell for 循环写法总结
- Linux下C开发,怎么做成库文件,又怎么引用这个库文件?
- android Touch事件详解(解决冲突问题)
- 正则表达式全部符号解释
- Google Maps V3 之 路线服务
- java反射机制