您的位置:首页 > 编程语言 > Java开发

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见解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: