- 浏览: 957198 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
核心部分,可以说就是在权限那一快。
FilterSecurityInterceptor
普通的拦截器
MethodSecurityInterceptor
针对方法级的拦截器
AspectJSecurityInterceptor
等等,几个拦截器
这几个实现的代码中,可以看出来都是通过其父类AbstractSecurityInterceptor
beforeInvocation方法来完成实际的安全控制。
这些实现类只是根据自己的实现,来决定要对哪些资源,或者哪些方法进行控制。
protected InterceptorStatusToken beforeInvocation(Object object) {
Assert.notNull(object, "Object was null");
final boolean debug = logger.isDebugEnabled();
if (!getSecureObjectClass().isAssignableFrom(object.getClass())) {
throw new IllegalArgumentException("Security invocation attempted for object "
+ object.getClass().getName()
+ " but AbstractSecurityInterceptor only configured to support secure objects of type: "
+ getSecureObjectClass());
}
Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource().getAttributes(object);
if (attributes == null) {
if (rejectPublicInvocations) {
throw new IllegalArgumentException("Secure object invocation " + object +
" was denied as public invocations are not allowed via this interceptor. "
+ "This indicates a configuration error because the "
+ "rejectPublicInvocations property is set to 'true'");
}
if (debug) {
logger.debug("Public object - authentication not attempted");
}
publishEvent(new PublicInvocationEvent(object));
return null; // no further work post-invocation
}
if (debug) {
logger.debug("Secure object: " + object + "; Attributes: " + attributes);
}
if (SecurityContextHolder.getContext().getAuthentication() == null) {
credentialsNotFound(messages.getMessage("AbstractSecurityInterceptor.authenticationNotFound",
"An Authentication object was not found in the SecurityContext"), object, attributes);
}
Authentication authenticated = authenticateIfRequired();
// Attempt authorization
try {
this.accessDecisionManager.decide(authenticated, object, attributes);
}
catch (AccessDeniedException accessDeniedException) {
publishEvent(new AuthorizationFailureEvent(object, attributes, authenticated,
accessDeniedException));
throw accessDeniedException;
}
if (debug) {
logger.debug("Authorization successful");
}
publishEvent(new AuthorizedEvent(object, attributes, authenticated));
// Attempt to run as a different user
Authentication runAs = this.runAsManager.buildRunAs(authenticated, object, attributes);
if (runAs == null) {
if (debug) {
logger.debug("RunAsManager did not change Authentication object");
}
// no further work post-invocation
return new InterceptorStatusToken(authenticated, false, attributes, object);
} else {
if (debug) {
logger.debug("Switching to RunAs Authentication: " + runAs);
}
SecurityContextHolder.getContext().setAuthentication(runAs);
// need to revert to token.Authenticated post-invocation
return new InterceptorStatusToken(authenticated, true, attributes, object);
}
}
FilterSecurityInterceptor
普通的拦截器
MethodSecurityInterceptor
针对方法级的拦截器
AspectJSecurityInterceptor
等等,几个拦截器
这几个实现的代码中,可以看出来都是通过其父类AbstractSecurityInterceptor
beforeInvocation方法来完成实际的安全控制。
这些实现类只是根据自己的实现,来决定要对哪些资源,或者哪些方法进行控制。
protected InterceptorStatusToken beforeInvocation(Object object) {
Assert.notNull(object, "Object was null");
final boolean debug = logger.isDebugEnabled();
if (!getSecureObjectClass().isAssignableFrom(object.getClass())) {
throw new IllegalArgumentException("Security invocation attempted for object "
+ object.getClass().getName()
+ " but AbstractSecurityInterceptor only configured to support secure objects of type: "
+ getSecureObjectClass());
}
Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource().getAttributes(object);
if (attributes == null) {
if (rejectPublicInvocations) {
throw new IllegalArgumentException("Secure object invocation " + object +
" was denied as public invocations are not allowed via this interceptor. "
+ "This indicates a configuration error because the "
+ "rejectPublicInvocations property is set to 'true'");
}
if (debug) {
logger.debug("Public object - authentication not attempted");
}
publishEvent(new PublicInvocationEvent(object));
return null; // no further work post-invocation
}
if (debug) {
logger.debug("Secure object: " + object + "; Attributes: " + attributes);
}
if (SecurityContextHolder.getContext().getAuthentication() == null) {
credentialsNotFound(messages.getMessage("AbstractSecurityInterceptor.authenticationNotFound",
"An Authentication object was not found in the SecurityContext"), object, attributes);
}
Authentication authenticated = authenticateIfRequired();
// Attempt authorization
try {
this.accessDecisionManager.decide(authenticated, object, attributes);
}
catch (AccessDeniedException accessDeniedException) {
publishEvent(new AuthorizationFailureEvent(object, attributes, authenticated,
accessDeniedException));
throw accessDeniedException;
}
if (debug) {
logger.debug("Authorization successful");
}
publishEvent(new AuthorizedEvent(object, attributes, authenticated));
// Attempt to run as a different user
Authentication runAs = this.runAsManager.buildRunAs(authenticated, object, attributes);
if (runAs == null) {
if (debug) {
logger.debug("RunAsManager did not change Authentication object");
}
// no further work post-invocation
return new InterceptorStatusToken(authenticated, false, attributes, object);
} else {
if (debug) {
logger.debug("Switching to RunAs Authentication: " + runAs);
}
SecurityContextHolder.getContext().setAuthentication(runAs);
// need to revert to token.Authenticated post-invocation
return new InterceptorStatusToken(authenticated, true, attributes, object);
}
}
发表评论
-
国际化之MessageSourceAware和MessageSourceAccessor
2014-01-06 23:13 2850先看接口MessageSourceAware 该接口的注释中 ... -
国际化
2014-01-06 23:05 821官方推荐的方式是通过protected MessageSour ... -
重要的几个过滤器
2013-07-29 22:48 977需要注意的是,springsecurity不只是这几个过滤器, ... -
整站国际化方案
2012-11-28 17:46 1107当前常见的实现方式,主要由两种方案实现 1.通过locale ... -
关于几个类和值的含义
2012-07-03 14:30 1026Authentication authentication 认 ... -
spring security 标签应用
2012-03-16 17:27 1324应用标签库:<%@ taglib prefix='sec ... -
注解--方法保护
2011-12-30 15:51 1153@RolesAllowed 和@Secured 注解需要开启 ... -
单元测试
2011-12-10 20:11 906只要将第一条链注入到test类,通过mock就可以了。 @Re ... -
资料http://www.fengfly.com/document/springsecurity3/introduction.html#what-is-aceg
2011-06-30 14:01 1094http://www.fengfly.com/document ... -
命名空间
2011-04-06 12:39 906<beans xmlns="http://ww ...
相关推荐
本手册详细介绍了SpringSecurity的配置、使用和核心概念,帮助开发者深入理解如何实现安全权限管理。 SpringSecurity的核心特性包括身份验证(Authentication)和授权(Authorization)。身份验证是确认用户的身份...
Java安全包是Java开发工具集(JDK)中的一个重要组成部分,它主要负责提供一套机制来保护Java应用程序和Java虚拟机(JVM)免受恶意代码的攻击。在JDK 1.8版本中,安全包尤其关键,因为它包含了用于安全管理、加密、...
本文将全面解析WS-Security的核心概念、与传统安全机制的差异、以及其实现和应用。 ### WS-Security概述 WS-Security是由OASIS(The Organization for the Advancement of Structured Information Standards)在...
6. **源码分析**:"Spring-Security安全权限管理手册.pdf"可能包含了对Spring Security框架的深入解析,包括其架构设计、核心类的使用方法以及最佳实践等。而"springsecurity-sample.rar"则可能是包含示例代码的...
总之,《Spring Security安全权限管理手册》为初学者提供了一个全面了解Spring Security的平台,通过掌握其核心概念、架构原理和实践应用,开发者可以有效地在Java企业级应用中实施安全性和访问控制,保障系统的安全...
`Spring-Security安全权限管理手册.doc` 提供了详细的教程和指南,可以帮助理解和应用这些知识。 **总结** Spring Security 是一个强大而灵活的安全框架,能够帮助开发者构建安全的应用程序。它提供了认证和授权的...
交换机是网络设备的核心,连接着局域网中的所有计算机和服务器,因此,确保交换机的安全是维护整个网络稳定运行的关键。交换机的安全措施通常包括防止未授权访问、数据包嗅探、MAC地址泛洪攻击、ARP欺骗、VLAN跳跃...
2. **spring-security-core**:核心模块,包含基本的安全功能实现。 3. **spring-core**:Spring 框架的核心库,提供了 IoC 和依赖注入等功能。 4. **spring-context**:提供应用程序上下文的高级服务,如事件传播、...
Spring Security 是一...总之,Spring Security 3.0提供了一套完整的安全解决方案,其核心组件包括了认证、授权、Web安全和对象级别的权限控制。理解和掌握这些jar包的功能,能够帮助开发者有效地构建安全的应用程序。
这些依赖包括`spring-security-core`、`spring-security-acl`、`spring-security-taglibs`等,它们涵盖了Spring Security的核心功能、访问控制列表(ACL)以及用于JSP页面的安全标签库。此外,还需要Spring框架的...
1. **spring-security-core-2.0.5.RELEASE.jar**:这是Spring Security的核心库,包含了所有基本的安全处理类和接口。这个版本的发布解决了2.0.4版本中的已知问题,并可能包含一些性能优化和新功能。它包括了访问...
此外,Spring Security提供了过滤器链,这是处理请求的关键部分。如AnonymousAuthenticationFilter负责匿名用户的处理,UsernamePasswordAuthenticationFilter处理基于表单的登录,而RememberMeAuthenticationFilter...
OpenStack云安全参考指导(OpenStack Security Guide)是一本为用户提供保护OpenStack云平台安全最佳实践和概念性信息的手册。该文档详细阐述了多种安全措施和配置建议,涵盖从基础系统文档的建立到身份认证、API...
以上只是Spring Security学习过程中的一部分要点,实际上,这个框架非常深奥,包含了许多高级特性,如频道安全、密码存储、国际化的错误消息等。在学习时,建议结合实际项目实践,这样能更好地理解和掌握其工作原理...
2. **spring-security-core**:这是Spring Security的基础模块,提供了安全核心服务,如安全性上下文、访问决策管理器、权限评估器等。它实现了基于角色的访问控制(RBAC)模型,处理用户、权限、角色等核心概念。 ...
自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断迭代更新,以适应不断变化的安全需求和技术发展。 ##### 1.3 发行版本号 Spring Security 3.0.1 是在 Spring Security 3.0 的基础上...
这些组件构成了Spring Security安全体系的基石,负责处理用户的身份验证、加载用户详细信息以及密码的存储和校验。 #### 安全过滤器链 Spring Security的安全过滤器链是其架构中的一个重要组成部分,它决定了请求...
最后,实战部分将指导你如何在实际项目中应用Spring Security,包括创建安全的RESTful API、保护前后端分离的应用、处理权限细粒度控制等。同时,手册还会涵盖一些常见的问题和解决方案,帮助开发者解决在实施过程中...
1. **Filter Security Interceptor (FSI)**:这是Spring Security的Web安全部分,它通过一系列过滤器在HTTP请求级别提供安全控制。这些过滤器会检查用户是否已经登录,并根据预定义的访问决策管理器(Access Decision...