Acegi保护对方法的呼叫
Acegi是专为 Spring 设计的安全框架,藉由Spring所提供的AOP功能,
可以使用org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor来对方法呼叫进行拦截,
对方法的呼叫设定权限保护。
举个实际的例子来说,假设您设计了以下的介面与方法:
* ISome.java
package onlyfun.caterpillar;
public interface ISome {
public void doNormal();
public void doSupervisor();
}
* Some.java
package onlyfun.caterpillar;
public class Some implements ISome {
public void doNormal() {
System.out.println("do normal...");
}
public void doSupervisor() {
System.out.println("do supervisor...");
}
}
假设某个请求下,会对Some的实例之方法进行呼叫,例如某个Servlet:
* SomeServlet.java
package onlyfun.caterpillar;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SomeServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(
request.getSession().getServletContext());
ISome some = (ISome) ctx.getBean("some");
some.doNormal();
some.doSupervisor();
PrintWriter out = response.getWriter();
out.print("process successfully...");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
在web.xml中增加SomeServlet的定义:
<servlet>
<servlet-name>SomeServlet</servlet-name>
<servlet-class>onlyfun.caterpillar.SomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SomeServlet</servlet-name>
<url-pattern>/SomeServlet</url-pattern>
</servlet-mapping>
在不设限的情况下,请求SomeServlet,会呼叫Some实例的doNormal()方法与doSecurity()方法,
现在假设您想让 doSecurity()只让ROLE_SUPERVISOR的使用者来呼叫,则您可以在acegi-config.xml中加入:
* acegi-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
...
<bean />
<bean
>
<property >
<ref bean="authenticationManager"/>
</property>
<property >
<ref bean="accessDecisionManager"/>
</property>
<property >
<value>onlyfun.caterpillar.ISome.doSupervisor=ROLE_SUPERVISOR</value>
</property>
</bean>
<bean
>
<property >
<list>
<value>some</value>
</list>
</property>
<property >
<list>
<value>methodSecurityInterceptor</value>
</list>
</property>
</bean>
</beans>
完成以下设定,如果再次请求SomeServlet,可以在控制台中看到doNormal()执行完成,
但doSecurity()必须是 ROLE_SUPERVISOR才可以存取,因此您会被送往acegilogin.jsp进行登入,
如果登入正确,就会执行doSecurity(),如果登入为非ROLE_SUPERVISOR,则会发生授权失败的例外。
相关推荐
在"acegi保护业务方法_basedDatabase"这个主题中,我们主要探讨如何使用Acegi Security来保护基于数据库的业务方法,确保只有授权的用户才能访问特定的业务功能。 首先,我们需要了解Acegi Security的核心概念。...
这个“acegi保护业务方法_basedMemory”主题可能是关于如何使用Acegi Security来保护应用程序中的特定业务方法,特别是那些处理敏感数据或关键操作的方法。在这个场景下,“basedMemory”可能指的是基于内存的认证和...
虽然在Spring 3.0之后,Acegi 被Spring Security所取代,但其在当时对Spring社区的贡献是不可忽视的。 1. **Acegi Security的核心概念** - **身份验证(Authentication)**:Acegi 提供了多种身份验证机制,如基于...
在“使用 Acegi 保护 Java 应用程序:续二”这篇博文中,作者可能深入探讨了如何将 Acegi 集成到 Java 应用程序中,以增强其安全性,特别是对于 Web 应用程序。下面我们将详细讨论 Acegi 的核心概念和使用方法,以及...
本篇文章是“使用 Acegi 保护 Java 应用程序”系列的续篇,旨在深入探讨 Acegi 的使用方法。在前一篇文章中,我们可能已经介绍了 Acegi 的基本概念和安装步骤。在这里,我们将更进一步,讨论如何配置和实现 Acegi 的...
这份共分三部分的系列文章介绍了 Acegi 安全系统(Acegi Security System),它是用于 JavaTM 企业应用程序的强大的开源安全框架。...您介绍 Acegi 的架构和组件,并展示如何使用它来保护一个简单的 Java 企业应用程序。
在本文中,我们将深入探讨Acegi安全框架的核心概念、工作原理以及如何在实际项目中使用它来保护我们的Java应用。 首先,Acegi(现已被Spring Security替代)是一个基于Spring的全面安全解决方案,它允许开发者在不...
这包括对敏感数据进行加密,使用 HTTPS 以保护通信安全,以及定期更新和审核安全配置。 Acegi 与 Spring 深度集成,使得这些最佳实践更容易实施。 最后,Acegi 提供了丰富的日志和审计功能,可以帮助开发者监控应用...
13. **与JBoss、Jetty、Resin等容器的集成**:提供对不同服务器环境的支持。 **授权(Authorization)**是确定主体(Principal)是否具有执行特定操作的权限的过程。Acegi Security允许高度自定义的授权规则,可以...
此外,Acegi 还支持通过 Spring AOP 在方法级别实现安全控制,通过代理对象对受保护的方法进行拦截。 11.1.1 安全拦截器 安全拦截器是 Acegi 中的关键组件,它类似于锁舌,阻止未经授权的用户访问受保护的资源。...
Acegi的主要目标是实现业务对象方法级别的安全控制,确保URL资源、业务类方法以及领域对象的访问得到适当限制。 1. URL资源的访问控制:Acegi能够设定不同用户群体对网页资源的访问权限。例如,所有用户可以访问...
在本文中,我们将深入探讨Spring Acegi的核心概念、功能和使用方法。 首先,Acegi的主要目标是保护Spring应用免受非法访问,它提供了丰富的功能来实现用户认证、会话管理、权限控制以及安全相关的异常处理。Acegi的...
它可以基于角色、URL、方法或者更复杂的规则进行控制。 3. **会话管理(Session Management)**:Acegi提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 4. **过滤...
2. **授权(Authorization)**:Acegi允许基于角色的访问控制(RBAC),可以设置权限规则来控制用户对资源的访问。这包括访问控制列表(ACL)和方法级别的安全性,确保只有授权用户才能执行特定操作。 3. **会话...
Acegi不仅能够保护Web应用系统,还能在更低层次上对方法调用进行安全控制。 **1.1 使用Servlet过滤器保护Web应用系统** 当部署在Web环境中时,Acegi使用Servlet过滤器拦截HTTP请求,以执行身份认证和权限检查。...
Acegi Security提供了基于角色的访问控制(RBAC),可以对URL、方法甚至业务对象进行权限检查。在“方法版”中,这可能涉及如何实现基于注解的方法安全,通过在方法上添加如`@Secured`或`@PreAuthorize`等注解来...