- 浏览: 71688 次
- 性别:
文章分类
最新评论
-
yehayeah:
ljm653467 写道 嗯,很好,可以借鉴,不过我想问的是在 ...
转载:单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接 -
ljm653467:
嗯,很好,可以借鉴,不过我想问的是在你上面的代码基础上,如果我 ...
转载:单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接
原文作者:fancydeepin
原文出处:http://www.blogjava.net/fancydeepin
声明:本人转载只为分享,如涉及商业版权纠纷,请及时与本人联系,必将立即删除,造成不便,还望见谅,谢谢。
Spring Security 为基于 Java EE 企业应用提供了全面安全服务。安全主要包括两个方面的操作:“认证”和“验证”(或者说是权限的控制)。
“认证”是为用户建立一个他所声明的主体的过程(有点像注册账号);“验证”是指一个用户能否在你的应用中执行某个操作。
其他的就不多废话了,直接进入主题,下面是 Spring Security 官网的下载地址:
官网下载地址 1: http://static.springsource.org/spring-security/site/downloads.html
官网下载地址 2:http://www.springsource.org/download/community?project=Spring%2520Security
建议你点第二个超链接下载,下载地址 2 是提供了 Spring Security 的各个版本下载列表,只是下载前需要填写一点信息,你可以随便填点东西提交过去就能下载了。
Spring Security 目前最新版本是 3.1.2,本人用的是 3.0.5 版本,3.0.x 和 3.1.x 版本有很大的不同,请根据不同的版本查看相应的帮助文档来使用。
Spring Security 3.0.5 官网下载地址: http://s3.amazonaws.com/dist.springframework.org/release/SEC/spring-security-3.0.5.RELEASE.zip
准备环境:
Eclipse :3.6
Maven :3.0.4
Spring :3.0.5
Spring Security :3.0.5
在做 Java EE 运用开发的时候,笔者身边有不少朋友都是用 myeclipse IDE 作为开发环境,笔者很长一段时间也是在用 myeclipse 作为开发工具,使用 myeclipse 的好处自然要比
使用 eclipse 的好处多,从 myeclipse 换到 eclipse 开发环境中,你会发现 myeclipse 的两个很显然的好处是,导包方便和集成了各种服务器,部署和启动服务器方便快捷,但在
eclipse 中却不然,所以这里借助 maven 来完成这些工作,没有接触过 maven 的也没有关系,你只需要知道下面用 maven 是为了导包和部署以及启动服务器就行了。其余的与你
在 myeclipse 上做开发是一样的。
先来看下 maven 的配置文件 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fancy</groupId>
<artifactId>SpringSecurityDemo</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>SpringSecurityDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Dependency Start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Dependency End -->
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Security End -->
</dependencies>
<build>
<finalName>SpringSecurityDemo</finalName>
<!-- Jetty Server -->
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>2</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
</project>
上面配置所做的工作是,将 Spring 3.0.5 和 Spring Security 3.0.5 所需的 jar 包导入工程中,并以 jetty 作为运用服务器,相应的,如果你没有使用 maven,你完全可以忽略无视
这里的配置,而只需将这些 jar 包导入到你的工程中。
使用 Spring Security 需要在 web.xml 配置文件中配置下面的一句话:
<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>
下面看 web.xml 文件如何配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 开启Spring监听 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring FilterChain(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>
<welcome-file-list>
<welcome-file>view/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
接触过 Spring 的朋友对 Spring 的配置一定不会陌生的了,以上配置是将所有与 Spring 配置相关的配置文件配置到了 classpath 目录下,在 myeclipse 上做开发的朋友一般会把它
配置到 WEB-INF 目录文件下,即把 <param-value>classpath:applicationContext*.xml</param-value> 替换成
<param-value>/WEB-INF/applicationContext*.xml</param-value>,在此,你可以根据情况来配置它的存放位置。另外,把默认的首页 index.jsp 配置成了 view 目录下的
index.jsp。view 目录接下来会讲到,在 webapp 目录下新建一个 view 文件夹,如果是 myeclipse 开发环境的,就在 WebRoot 目录下新建此文件夹,在 view 文件夹下再新建
user、admin 两个文件夹,在 view 目录下新建一个 index.jsp:
view/index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Welcome Page</title>
</head>
<body>
<h3>所有人可见页面!</h3>
<h2>Welcome!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/user/user.jsp">user.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/admin/admin.jsp">admin.jsp</a>
</body>
</html>
在 user 目录下新建一个 user.jsp:
view/user/user.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>User Page</title>
</head>
<body>
<h3>此处内容至少是普通用户才可见!</h3>
<h2>Hello User!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/index.jsp">index.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/admin/admin.jsp">admin.jsp</a>
</body>
</html>
在 admin 目录下新建一个 admin.jsp:
view/admin/admin.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Admin Page</title>
</head>
<body>
<h3>此处内容管理员用户才可见!</h3>
<h2>Hello Admin!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/index.jsp">index.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/user/user.jsp">user.jsp</a>
</body>
</html>
在 classpath 目录下新建一个 applicationContext-security.xml 文件,该文件是 Spring Security 的配置文件,文件的名字不是固定的,可根据情况来取名。
applicationContext-security.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/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
<http auto-config="true">
<!-- 以下文件不检查权限 -->
<intercept-url pattern="/view/*" filters="none"/>
<!-- 访问权限 -->
<intercept-url pattern="/view/user/**" access="ROLE_USER"/>
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="fancy" password="fan123" authorities="ROLE_USER" />
<user name="fancydeepin" password="fan456" authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
以上的这个文件的配置是关键,其中:
<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.3.xsd">
…… ……
</beans:beans>
这是 Spring Security 3.0.5 所使用的命名空间的固定写法,没什么好讲的,照抄就行,不同版本的命名空间所使用的配置方式不一样,具体配置请查看 Spring Security 的帮助文档。
<http></http> 是实现安全的配置,具体如下:
预备基本知识:
假设 A 文件夹下有个 B 文件夹,则:
/A/* 表示:A 文件夹下的所有文件,但不包括 B 文件夹,B 文件夹里的文件与其无关;
/A/** 表示:A 文件夹下的所有文件,包括 B 文件夹和 B 文件夹下的所有文件;
它们的区别是,“/*” 不能够跨文件夹,而 “/**” 能够跨文件夹。
<intercept-url pattern="/view/*" filters="none"/>: pattern="/view/*" —> view 目录下的所有文件,filters="none" —> 不验证权限,即,所有用户都可直接访问;
<intercept-url pattern="/view/user/**" access="ROLE_USER"/>: access="ROLE_USER" —> 只有 ROLE_USER 权限的用户才可访问 user 目录下的文件;
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>: access="ROLE_ADMIN" —> 只有 ROLE_ADMIN 权限的用户才可访问 admin 目录下的文件。
接着来看验证管理的配置:
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="userpassword" authorities="ROLE_USER" />
<user name="admin" password="adminpassword" authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
在这里,配置两种不同权限的用户,它们分别是:
账号:user,密码:userpassword,权限是:ROLE_USER
账号:admin,密码:adminpassword,权限是:ROLE_USER、ROLE_ADMIN
最后,来看一下整个 demo 的目录结构:
运行服务器,访问:http://localhost:8080/SpringSecurityDemo/
接着点击 user.jsp 或 admin.jsp 中的随便一个超链接,假设点击的是 use.jsp 的超链接:
这时候就奇怪了,它并没有去到 user.jsp 的页面,而是出来了一个像登录一样的页面,再观察一下地址栏,我们确实没有在程序中编写过这个页面,那么,它是怎么跑出来的呢?
很简单,因为在 applicationContext-security.xml 配置文件中配置了: <intercept-url pattern="/view/user/**" access="ROLE_USER"/>,也就是说,user.jsp 文件的访问
受到了保护,不是随随便便就能直接访问的到的,因为 user.jsp 文件在 user 目录下,而 user 目录被配置了只有 ROLE_USER 权限的用户才能够访问,所以,此时点击 user.jsp
超链接时并不能直接到达 user.jsp 页面,Spring Security 会对这个访问的请求进行验证,故而出现了这个登录页面,这个登录页面是 Spring Security 内部默认的实现,所以,
你会看到这个登录页面比较简陋,实际上,我们都不直接使用这个登录页面,而是在 applicationContext-security.xml 配置文件中配置我们自己的登录页面,这个将在下篇随笔
提出,在这里,先将就用着这个登录页面。接着你就可以使用先前配置过的账号登录了,其中,账号或密码不正确都无法登录系统,假设用 user 这个账号登录:
此时,当点击 index.jsp 超链接能不能回到 index.jsp 的页面呢?能,任何时候都能,因为 index.jsp 是在 view 的根目录下,而在 applicationContext-security.xml 配置文件中,
配置了:<intercept-url pattern="/view/*" filters="none"/>,也就是说,index.jsp 是不受保护的,它可以在任何时候被任意用户访问;
在此时,当点击 admin.jsp 超链接时,能不能去到 admin.jsp 的页面呢?如果此时你点击了 admin.jsp 该超链接,则会报 403 ERROR:
注:403错误,是网站访问过程中,常见的错误提示。资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
为什么会发出 403 错误呢?不是已经登录了吗?看上面有关 403 错误的解释就很清楚了,这是因为在 applicationContext-security.xml 配置文件中,配置了:
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>,而 admin.jsp 在 admin 目录下,所以访问该文件所需的权限是 ROLE_ADMIN,而登录的
user 账号所持有的访问权限是 ROLE_USER,权限不一致,所以无法访问 admin.jsp,以致 403 错误的产生。
接下来换一个账号登录,使用 admin 账号登录,admin 账号所持有的权限既有 ROLE_USER 的权限,又有 ROLE_ADMIN 的权限,所以用 admin 账号登录可以访问
index.jsp、user.jsp、admin.jsp,这几个超链接用 admin 账号都可以访问的到,这里就不再演示了。
限于篇幅,Spring Security 基础篇完结,如本地安装 maven 的朋友可直接下载本文 demo 运行,下载地址:http://files.blogjava.net/fancydeepin/SpringSecurityDemo.zip
未完待续 ……
原文出处:http://www.blogjava.net/fancydeepin
声明:本人转载只为分享,如涉及商业版权纠纷,请及时与本人联系,必将立即删除,造成不便,还望见谅,谢谢。
Spring Security 为基于 Java EE 企业应用提供了全面安全服务。安全主要包括两个方面的操作:“认证”和“验证”(或者说是权限的控制)。
“认证”是为用户建立一个他所声明的主体的过程(有点像注册账号);“验证”是指一个用户能否在你的应用中执行某个操作。
其他的就不多废话了,直接进入主题,下面是 Spring Security 官网的下载地址:
官网下载地址 1: http://static.springsource.org/spring-security/site/downloads.html
官网下载地址 2:http://www.springsource.org/download/community?project=Spring%2520Security
建议你点第二个超链接下载,下载地址 2 是提供了 Spring Security 的各个版本下载列表,只是下载前需要填写一点信息,你可以随便填点东西提交过去就能下载了。
Spring Security 目前最新版本是 3.1.2,本人用的是 3.0.5 版本,3.0.x 和 3.1.x 版本有很大的不同,请根据不同的版本查看相应的帮助文档来使用。
Spring Security 3.0.5 官网下载地址: http://s3.amazonaws.com/dist.springframework.org/release/SEC/spring-security-3.0.5.RELEASE.zip
准备环境:
Eclipse :3.6
Maven :3.0.4
Spring :3.0.5
Spring Security :3.0.5
在做 Java EE 运用开发的时候,笔者身边有不少朋友都是用 myeclipse IDE 作为开发环境,笔者很长一段时间也是在用 myeclipse 作为开发工具,使用 myeclipse 的好处自然要比
使用 eclipse 的好处多,从 myeclipse 换到 eclipse 开发环境中,你会发现 myeclipse 的两个很显然的好处是,导包方便和集成了各种服务器,部署和启动服务器方便快捷,但在
eclipse 中却不然,所以这里借助 maven 来完成这些工作,没有接触过 maven 的也没有关系,你只需要知道下面用 maven 是为了导包和部署以及启动服务器就行了。其余的与你
在 myeclipse 上做开发是一样的。
先来看下 maven 的配置文件 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fancy</groupId>
<artifactId>SpringSecurityDemo</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>SpringSecurityDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Dependency Start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Dependency End -->
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Security End -->
</dependencies>
<build>
<finalName>SpringSecurityDemo</finalName>
<!-- Jetty Server -->
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>2</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
</project>
上面配置所做的工作是,将 Spring 3.0.5 和 Spring Security 3.0.5 所需的 jar 包导入工程中,并以 jetty 作为运用服务器,相应的,如果你没有使用 maven,你完全可以忽略无视
这里的配置,而只需将这些 jar 包导入到你的工程中。
使用 Spring Security 需要在 web.xml 配置文件中配置下面的一句话:
<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>
下面看 web.xml 文件如何配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 开启Spring监听 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring FilterChain(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>
<welcome-file-list>
<welcome-file>view/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
接触过 Spring 的朋友对 Spring 的配置一定不会陌生的了,以上配置是将所有与 Spring 配置相关的配置文件配置到了 classpath 目录下,在 myeclipse 上做开发的朋友一般会把它
配置到 WEB-INF 目录文件下,即把 <param-value>classpath:applicationContext*.xml</param-value> 替换成
<param-value>/WEB-INF/applicationContext*.xml</param-value>,在此,你可以根据情况来配置它的存放位置。另外,把默认的首页 index.jsp 配置成了 view 目录下的
index.jsp。view 目录接下来会讲到,在 webapp 目录下新建一个 view 文件夹,如果是 myeclipse 开发环境的,就在 WebRoot 目录下新建此文件夹,在 view 文件夹下再新建
user、admin 两个文件夹,在 view 目录下新建一个 index.jsp:
view/index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Welcome Page</title>
</head>
<body>
<h3>所有人可见页面!</h3>
<h2>Welcome!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/user/user.jsp">user.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/admin/admin.jsp">admin.jsp</a>
</body>
</html>
在 user 目录下新建一个 user.jsp:
view/user/user.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>User Page</title>
</head>
<body>
<h3>此处内容至少是普通用户才可见!</h3>
<h2>Hello User!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/index.jsp">index.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/admin/admin.jsp">admin.jsp</a>
</body>
</html>
在 admin 目录下新建一个 admin.jsp:
view/admin/admin.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Admin Page</title>
</head>
<body>
<h3>此处内容管理员用户才可见!</h3>
<h2>Hello Admin!</h2>
<HR>
<h4>Spring Security 权限管理访问:</h4>
<a href="${pageContext.request.contextPath}/view/index.jsp">index.jsp</a> <BR>
<a href="${pageContext.request.contextPath}/view/user/user.jsp">user.jsp</a>
</body>
</html>
在 classpath 目录下新建一个 applicationContext-security.xml 文件,该文件是 Spring Security 的配置文件,文件的名字不是固定的,可根据情况来取名。
applicationContext-security.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/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">
<http auto-config="true">
<!-- 以下文件不检查权限 -->
<intercept-url pattern="/view/*" filters="none"/>
<!-- 访问权限 -->
<intercept-url pattern="/view/user/**" access="ROLE_USER"/>
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="fancy" password="fan123" authorities="ROLE_USER" />
<user name="fancydeepin" password="fan456" authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
以上的这个文件的配置是关键,其中:
<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.3.xsd">
…… ……
</beans:beans>
这是 Spring Security 3.0.5 所使用的命名空间的固定写法,没什么好讲的,照抄就行,不同版本的命名空间所使用的配置方式不一样,具体配置请查看 Spring Security 的帮助文档。
<http></http> 是实现安全的配置,具体如下:
预备基本知识:
假设 A 文件夹下有个 B 文件夹,则:
/A/* 表示:A 文件夹下的所有文件,但不包括 B 文件夹,B 文件夹里的文件与其无关;
/A/** 表示:A 文件夹下的所有文件,包括 B 文件夹和 B 文件夹下的所有文件;
它们的区别是,“/*” 不能够跨文件夹,而 “/**” 能够跨文件夹。
<intercept-url pattern="/view/*" filters="none"/>: pattern="/view/*" —> view 目录下的所有文件,filters="none" —> 不验证权限,即,所有用户都可直接访问;
<intercept-url pattern="/view/user/**" access="ROLE_USER"/>: access="ROLE_USER" —> 只有 ROLE_USER 权限的用户才可访问 user 目录下的文件;
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>: access="ROLE_ADMIN" —> 只有 ROLE_ADMIN 权限的用户才可访问 admin 目录下的文件。
接着来看验证管理的配置:
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="userpassword" authorities="ROLE_USER" />
<user name="admin" password="adminpassword" authorities="ROLE_USER,ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
在这里,配置两种不同权限的用户,它们分别是:
账号:user,密码:userpassword,权限是:ROLE_USER
账号:admin,密码:adminpassword,权限是:ROLE_USER、ROLE_ADMIN
最后,来看一下整个 demo 的目录结构:
运行服务器,访问:http://localhost:8080/SpringSecurityDemo/
接着点击 user.jsp 或 admin.jsp 中的随便一个超链接,假设点击的是 use.jsp 的超链接:
这时候就奇怪了,它并没有去到 user.jsp 的页面,而是出来了一个像登录一样的页面,再观察一下地址栏,我们确实没有在程序中编写过这个页面,那么,它是怎么跑出来的呢?
很简单,因为在 applicationContext-security.xml 配置文件中配置了: <intercept-url pattern="/view/user/**" access="ROLE_USER"/>,也就是说,user.jsp 文件的访问
受到了保护,不是随随便便就能直接访问的到的,因为 user.jsp 文件在 user 目录下,而 user 目录被配置了只有 ROLE_USER 权限的用户才能够访问,所以,此时点击 user.jsp
超链接时并不能直接到达 user.jsp 页面,Spring Security 会对这个访问的请求进行验证,故而出现了这个登录页面,这个登录页面是 Spring Security 内部默认的实现,所以,
你会看到这个登录页面比较简陋,实际上,我们都不直接使用这个登录页面,而是在 applicationContext-security.xml 配置文件中配置我们自己的登录页面,这个将在下篇随笔
提出,在这里,先将就用着这个登录页面。接着你就可以使用先前配置过的账号登录了,其中,账号或密码不正确都无法登录系统,假设用 user 这个账号登录:
此时,当点击 index.jsp 超链接能不能回到 index.jsp 的页面呢?能,任何时候都能,因为 index.jsp 是在 view 的根目录下,而在 applicationContext-security.xml 配置文件中,
配置了:<intercept-url pattern="/view/*" filters="none"/>,也就是说,index.jsp 是不受保护的,它可以在任何时候被任意用户访问;
在此时,当点击 admin.jsp 超链接时,能不能去到 admin.jsp 的页面呢?如果此时你点击了 admin.jsp 该超链接,则会报 403 ERROR:
注:403错误,是网站访问过程中,常见的错误提示。资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
为什么会发出 403 错误呢?不是已经登录了吗?看上面有关 403 错误的解释就很清楚了,这是因为在 applicationContext-security.xml 配置文件中,配置了:
<intercept-url pattern="/view/admin/**" access="ROLE_ADMIN"/>,而 admin.jsp 在 admin 目录下,所以访问该文件所需的权限是 ROLE_ADMIN,而登录的
user 账号所持有的访问权限是 ROLE_USER,权限不一致,所以无法访问 admin.jsp,以致 403 错误的产生。
接下来换一个账号登录,使用 admin 账号登录,admin 账号所持有的权限既有 ROLE_USER 的权限,又有 ROLE_ADMIN 的权限,所以用 admin 账号登录可以访问
index.jsp、user.jsp、admin.jsp,这几个超链接用 admin 账号都可以访问的到,这里就不再演示了。
限于篇幅,Spring Security 基础篇完结,如本地安装 maven 的朋友可直接下载本文 demo 运行,下载地址:http://files.blogjava.net/fancydeepin/SpringSecurityDemo.zip
未完待续 ……
相关推荐
3. **定义安全规则**: 在Spring Security配置文件中定义具体的认证和授权规则,如使用数据库存储用户信息、使用自定义登录页面等。 #### 四、Spring Security 2.x 概览 Spring Security 2.x不仅提供了强大的功能...
赠送jar包:spring-security-rsa-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-rsa-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-rsa-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-crypto-5.5.2.jar; 赠送原API文档:spring-security-crypto-5.5.2-javadoc.jar; 赠送源代码:spring-security-crypto-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-...
赠送jar包:spring-security-core-5.3.9.RELEASE.jar; 赠送原API文档:spring-security-core-5.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...
9. **RESTful服务安全**:对于RESTful API,Spring Security提供了JWT(JSON Web Token)支持,允许安全地传输认证和授权信息。 10. **自定义**:Spring Security的灵活性允许开发者根据需求创建自定义策略和组件,...
通过对这些示例代码的学习和实践,开发者可以深入理解Spring Security 3的核心概念,并将其应用于实际项目中,确保应用程序的安全性。记得查看附带的使用文档,这将有助于理解和配置每个示例。同时,配合jar包,你...
3. **过滤器链**:Spring Security的核心是过滤器链,它拦截HTTP请求并执行安全逻辑。`FilterSecurityInterceptor`是其中的关键组件,它处理授权检查。3.1版中,你可以自定义过滤器顺序和配置,以适应不同的应用需求...
通过阅读《Spring Security3.pdf》和《spring security3 源码分析.pdf》这两份文档,你可以对Spring Security 3的内部工作机制有更深入的理解,从而更好地在项目中运用这个强大的安全框架。同时,这也会帮助你在面临...
它提供了全面的安全服务,包括认证、授权、CSRF防护、会话管理等。在深入理解Spring Security之前,我们需要了解几个核心概念: 1. **认证(Authentication)**:这是确认用户身份的过程。Spring Security 提供了...
在Spring Security 3版本中,该框架进行了大量的改进和优化,提供了更全面的安全控制,包括认证、授权、会话管理以及CSRF防护等。本文将深入探讨Spring Security 3的关键概念、核心组件以及实际应用。 1. **核心...
Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...
* 广泛的应用场景:Spring Security 可以应用于多种应用场景,例如 web 应用、后台服务等。 * 高度可配置性:Spring Security 的配置项非常灵活,可以根据实际需求进行配置。 Spring Security 是一个功能强大且灵活...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...
在Spring Security 3版本中,这个框架提供了全面的身份验证、授权和访问控制机制,帮助开发者构建安全的Web应用程序。本资源包含Spring Security 3的官方文档中文版、权限管理手册中文版以及相关的教程,对于学习和...
它最初是Acegi Security System for Spring的一个后继产品,提供了身份验证和授权机制,可以应用于Web层、方法层和访问服务层。 2. Spring Security的历史和版本: Spring Security的历史可以追溯到2003年,当时它...
通过阅读《Spring Security3 张卫滨(译)》,开发者可以深入理解Spring Security的工作原理,掌握其配置与使用技巧,从而在实际项目中构建安全可靠的Web应用程序。书中的实例和讲解将有助于解决在实现复杂安全需求时...
3. **过滤器链**:Spring Security 的核心是Filter Security Interceptor(过滤器安全拦截器)和Access Decision Manager(访问决策管理器)。过滤器链处理HTTP请求,进行身份验证和授权检查,而访问决策管理器根据...
### Spring Security 3.0.1 中文版知识点解析...通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这有助于开发者更好地利用 Spring Security 为应用程序构建强大的安全防护。
在 SpringSecurity电子书中,作者Ben Alex和Luke Taylor提供了对Spring Security的全面介绍,涵盖了从基本概念到高级特性以及如何配置和使用Spring Security的详细指南。 知识点一:Spring Security基础 1. Spring ...