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>