使用Java 5 Annotations 方式来实现方法级别的保护,配置文件如下:
<bean id="methodSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
<property name="validateConfigAttributes" value="false" />
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="objectDefinitionSource">
<bean class="org.acegisecurity.intercept.method.MethodDefinitionAttributes">
<property name="attributes">
<!-- 利用1.5Annotation的設定方式 -->
<bean class="org.acegisecurity.annotation.SecurityAnnotationAttributes" />
</property>
</bean>
</property>
</bean>
此外,在代码里面必使用Acegi Java 5 Security Annotations 来配置方法的保护属性。下面的例子使用 @Secured 注解来描述配置属性,如下示例:
import org.acegisecurity.annotation.Secured;
import org.springframework.transaction.annotation.Transactional;
/**
* 使用Java 5 注解来实现方法保护
*
* @author Janwer
*
*/
@Transactional
public interface WebService {
@Transactional(readOnly=true)
@Secured({"ROLE_CUSTOMER"})
List<Subscribe> queryOrderStates(long regId, int subcribeStatus);
@Transactional(readOnly=true)
@Secured({"ROLE_MANAGER"})
List<Subscribe> queryRegSubscribeState(Page page, boolean asc, int subcribeStatus);
@Secured({"ROLE_CUSTOMER"})
TransactionResult createSubscribeByAlipay(Map<String,String> m, Register r, int status, String alipayRecord);
}
你可能注意到了 validateConfigAttributes 属性在上面的 MethodSecurityInterceptor 示例中,当设置为 true (the default) ,在启动时 MethodSecurityInterceptor 将验证提供的所有配置属性是否有效。它每个配置属性的检查能通过 AccessDecisionManager 或 RunAsManager 来处理。假如它们都不能处理这些配置属性,那么一个异常将会被抛出。如果使用 Jakarta Commons 属性配置方法, 你应该将 validateConfigAttributes 设置为 false 。
注意:其实使用Java 5 的注释也应该设置为false ,否则在程序启动时,将有一个警告产生。并不影响它的正常使用。
WARN [org.acegisecurity.intercept.AbstractSecurityInterceptor.afterPropertiesSet:225]- Could not validate configuration attributes as the MethodDefinitionSource did not return a ConfigAttributeDefinition Iterator
请注意,当使用 BeanNameAutoProxyCreator 为安全过滤创建请求代理时,如果使用基于 CGLIB 的代理,那配置文件应当包含 proxyTargetClass 属性并设置为 true 。否则方法保护将不起作用。引用的是代理的呼叫,而不是实际代理的对象。注意采用这种方式需要 CGLIB 。如果直接使用 JDK1.5 动态代理时,可以注释掉这一属性,见如下示例:
<!-- 利用Spring的自动代理功能实现AOP代理 -->
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>methodSecurityInterceptor</value>
</list>
</property>
<property name="beanNames">
<list>
<!-- 需要保护的方法 -->
<value>registerService</value>
<value>mgrService</value>
<value>subService</value>
</list>
</property>
<!--property name="proxyTargetClass" value="true"/-->
</bean>
注意:上面是引用Acegi 官方文档描述,但在我的实际使用中,因为我用的是Spring 2.0.6 且使用基于 JDK1.5 的动态代理,所以不再需要proxyTargetClass 属性设置。当然如是使用 CGLIB 代理的就按官方说明来设置。
分享到:
相关推荐
AceGI,全称为Acegi Security,是Java领域中一个用于Spring框架的安全组件,它提供了全面的身份验证、授权和会话管理功能。这个框架在早期的Spring版本中非常流行,为开发者构建安全的Web应用程序提供了强大的支持。...
Java安全模型是Java平台上的一个核心概念,它定义了如何保护应用程序免受恶意代码的攻击,确保只有授权的用户和程序能够访问敏感资源。Acegi是Spring框架的一个早期安全模块,后来演变为Spring Security,是Java企业...
Acegi Security是Spring框架的一个扩展,它为Java应用程序提供了全面的安全性解决方案。在Acegi中,RBAC模式被用于构建一个灵活且可扩展的权限管理系统。下面我们将详细介绍Acegi Security与RBAC的结合以及在Spring...
敏捷Acegi、CAS++构建安全的Java系统pdf——part5
在本文中,我们将深入探讨Acegi安全框架的核心概念、工作原理以及如何在实际项目中使用它来保护我们的Java应用。 首先,Acegi(现已被Spring Security替代)是一个基于Spring的全面安全解决方案,它允许开发者在不...
JAVA开发专家:敏捷Acegi、CAS:构建安全的Java系统 pdf
这个“acegi保护业务方法_basedMemory”主题可能是关于如何使用Acegi Security来保护应用程序中的特定业务方法,特别是那些处理敏感数据或关键操作的方法。在这个场景下,“basedMemory”可能指的是基于内存的认证和...
在"acegi保护业务方法_basedDatabase"这个主题中,我们主要探讨如何使用Acegi Security来保护基于数据库的业务方法,确保只有授权的用户才能访问特定的业务功能。 首先,我们需要了解Acegi Security的核心概念。...
这份共分三部分的系列文章介绍了 Acegi 安全系统(Acegi Security System),它是用于 JavaTM 企业应用程序的强大的开源安全框架。...您介绍 Acegi 的架构和组件,并展示如何使用它来保护一个简单的 Java 企业应用程序。
在"使用 Acegi 保护 Java 应用程序:续二"这篇博文中,作者可能详细介绍了如何集成 Acegi 安全框架到 Java 应用程序中,以及如何配置和定制其安全策略。以下是对 Acegi 安全框架及其应用的一些关键知识点的详解: 1...
本篇文章是“使用 Acegi 保护 Java 应用程序”系列的续篇,旨在深入探讨 Acegi 的使用方法。在前一篇文章中,我们可能已经介绍了 Acegi 的基本概念和安装步骤。在这里,我们将更进一步,讨论如何配置和实现 Acegi 的...
Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...
Acegi 是一个强大的 Java 安全框架,专用于系统安全编程,尤其在处理认证和授权方面表现出色。在本文中,我们将深入探讨 Acegi 的基本概念、如何设置以及它如何与 Spring 框架集成。 首先,让我们了解 Acegi 的核心...
总之,Acegi 是一个强大的安全框架,它提供了丰富的工具和策略来保护 Java 应用程序。通过深入学习和应用 Acegi,开发者可以创建高度安全的应用,同时保持灵活性和可扩展性。在续三部分中,可能还会涉及更多高级话题...
Acegi的设计理念旨在解决传统Java认证和授权服务(JAAS)中存在的不足,如政策文件难以管理和用户权限无法根据对象状态动态调整等问题。 #### 2. Acegi安全框架的核心组件分析 Acegi的安全框架由多个核心组件构成...
Acegi Security是一个专门为Spring框架设计的权限控制框架,旨在为基于J2EE的企业级应用程序提供全面的安全服务。这个框架解决了J2EE规范中安全性配置不便于移植的问题,使得应用程序的安全设置能够在不同服务器环境...
在Java Web开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。...虽然Acegi Security已被Spring Security取代,但其核心理念和实践方法对于理解和掌握现代Web应用安全仍具有重要的参考价值。
它可以基于角色、URL、方法或者更复杂的规则进行控制。 3. **会话管理(Session Management)**:Acegi提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 4. **过滤...