Spring Security3的使用方法有4种:
一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件中。
二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置。
三种是细分角和权限,并将用户、角、权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,并分别实现AccessDecisionManager、InvocationSecurityMetadataSourceService和UserDetailsService,并在配置文件中进行相应配置。
四是修改spring security的源代码,主要是修改InvocationSecurityMetadataSourceService和UserDetailsService两个类。前者是将配置文件或数据库中存储的资源(url)提取出来加工成为url和权限列表的Map供Security使用,后者提取用户名和权限组成一个完整的 (UserDetails)User对象,该对象可以提供用户的详细信息供AuthentationManager进行认证与授权使用。该方法理论上可行,但是比较暴力,不推荐使用。
本文有两个例子,我在简单例子章节实现了第一种方法。在复杂例子章节实现了第二种和第三
种方法组合使用的例子。简单例子通俗易懂,不再赘述。复杂例子及其使用和扩展,我将穿插详细的配置注释和讲解,包括整个程序的执行过程。
简单例子
创建web工程如下图所示:
配置如下图所示:
单击Finish即可。
把从spring网站下载的spring-security-3.1.0.RELEASE解压,并将其中的spring-security-samples-contacts-3.1.0.RELEASE.war解压,把WEB-INF\lib中的jar包拷贝到如下图所示:
修改配置l如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="java.sun/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/javaee
java.sun/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
l
</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.t.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
在src中创建l内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="/schema/security"
xmlns:b="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd
/schema/security /schema/security/spring-security-3.1.xsd">
<http pattern="/login.jsp" security="none"/>
<http access-denied-page="/accessDenied.jsp" >
<form-login login-page="/login.jsp" />
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
<session-management>
<concurrency-control max-sessions=app开发公司哪家好"1" error-if-maximum-exceeded="false"/>
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="cyu" password="sap123" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</b:beans>
在WebRoot中创建login.jsp内容如下:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="j_spring_security_check" method="POST">
<table>
<tr>
<td>用户:</td>
<td><input type='text' name='j_username'></td>
</tr>
<tr>
<td>密码:</td>
<td><input type='password' name='j_password'></td>
</tr>
<tr>
<td><input name="reset" type="reset"></td>
<td><input name="submit" type="submit"></td>
</tr>
</table>
</form>
</body>
</html>
在WebRoot中创建accessDenied.jsp,内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>访问拒绝</title>
</head>
<body>
您的访问被拒绝,无权访问该资源! <br>
</body>
</html>
在WebRoot中创建admin.jsp内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'admin.jsp' starting page</title>
</head>
<body>
欢迎来到管理员页面. <br>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论