Spring之security配置
2016-05-12 11:25
519 查看
介绍
安全性是绝大多数应用系统中的一个重要切面( aspect ).Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架.
两个角度
Spring Security使用Servlet过滤器保护Web请求并限制URL级别的访问.使用Spring AOP保护方法调用—借助于对象代理和使用通知, 能够确保只有具备适当权限的用户才能访问安全保护的方法.
Spring Security 3.0模块
模块 | 描述 |
---|---|
ACL | 支持通过访问控制列表为域对象提供安全性 |
CAS客户端 | 提供了JA-SIG的Central Authentication Service进行集成的功能 |
配置 | 包含了对Spring Security XML命名空间的支持 |
核心 | 提供了Spring Security基本库 |
LDAP | 支持基于Lightweight Directory Access Protocol进行认证 |
OpenID | 支持分散式OpenID标准 |
Tag Library | 包含了一组JSP标签来实现视图级别的安全性 |
Web | 提供了Spring Security基于过滤器的Web安全性支持 |
保护Web请求
web.xml配置
<!-- DelegatingFilterProxy的<filter-name>是有意义的. 这个名字用于spring应用上下文中查找过滤器bean, Spring Security将自动创建一个ID为springSecurityFilterChain的过滤器Bean. SSFC( 上面的过滤器 )是个特殊的过滤器, 可以链接任意一个或多个其它过滤器. 当配置<security:http>元素时, Spring Security将会为我们自动创建这些Bean --> <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>
spring-security.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- web安全配置, 需要Spring MVC auto-config:自动配置, 为true时只需配置<security:intercept-url> use-expressions:使用表达式, 拦截属性access="hasRole('ROLE_SPITTER')" access-denied-page:当用户角色没有权限时重定向的页面 --> <security:http auto-config="false" use-expressions="false" access-denied-page="/auth/denied"> <!-- login-processing-url:登录表单提交回来进行用户认证的URL login-page:声明一个新的认证登录页面 authentication-failure-url:登录认证失败的重定向页面 --> <security:form-login login-processing-url="/static/j_spring_security_check" login-page="/auth/login" authentication-failure-url="/login?login_error=true"/> <!-- invalidate-session:实际调用session.destroy(), 销毁当前用户session logout-success-url:退出成功后重定向的页面 logout-url:退出页面 --> <security:logout invalidate-session="true" logout-success-url="/auth/login" logout-url="/logout"/> <!-- 第一句声明只有ROLE_ADMIN权限的才能访问/admin的资源 第二句声明需具有ROLE_SPITTER或ROLE_ADMIN角色认证用户才能访问所有URL --> <security:intercept-url pattern="/admin" access="ROLE_ADMIN"/> <security:intercept-url pattern="/**" access="ROLE_SPITTER, ROLE_ADMIN"/> </security:http> <!-- 指定自定义的认证管理 --> <security:authentication-manager> <!-- 提供认证 --> <security:authentication-provider> <!-- 简单的用户认证以及授权 name:登录的用户名 password:登录密码 authorities:系统为该用户授权 --> <security:user-service> <security:user name="admin" password="admin" authorities="ROLE_ADMIN"/> <security:user name="user" password="user" authorities="ROLE_SPITTER"/> </security:user-service> </security:authentication-provider> </security:authentication-manager> </beans>
Spring Security对Spring表达式语言的扩展
安全表达式 | 计算结果 |
---|---|
authentication | 用户的认证对象 |
denyAll | 结果始终为false |
hasAnyRole(list of roles) | 如果用户被授予了指定的任意权限,结果为true |
hasRole(role) | 如果用户被授予了指定的权限,结果为true |
hasIpAddress(IP Address) | 用户的IP地址(只能用在web安全性中) |
isAnonymous() | 如果当前用户为匿名用户,结果为true |
isAuthenticated() | 非匿名用户,结果为true |
isFullyAuthenticated() | 非匿名用户和非remember-me认证的,结果为true |
isRememberMe() | 当前用户是通过remember-me自动认证的,结果为true |
permitAll | 结果始终为true |
principal | 用户的主要信息对象 |
其它资料
ITEYE的一位大神的Spring Security见解相关文章推荐
- Java 基础知识(三)之关键字
- 详解Java异常Throwable、Error、Exception、RuntimeException的区别
- java 设计模式
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- Java编译后产生class文件的命名规则
- Java 查询当前日期和前后几天日期
- 【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Struts+Hibernate+Spring实现用户登录功能
- Java同步工具类总结
- Java同步工具类总结
- eclipse中文乱码怎么办
- Could not create the Java Virtual Machine
- 《JVM故障诊断指南》之3 —— Java 线程: JVM持有内存的分析
- java 读取数据库中表定义
- 《JVM故障诊断指南》之2 —— 调整合适的Java堆大小的技巧
- Java 实现HTML富文本导出至word完美解决方案
- Java线程池的几种实现方法及常见问题解答
- Javaweb学习之MVC