`
izuoyan
  • 浏览: 9403366 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Acegi保护对方法的呼叫

阅读更多
Acegi保护对方法的呼叫
2008年05月12日 星期一 10:23
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,则会发生授权失败的例外。

本篇日志被作者设置为禁止发表新评论


©2008 Baidu



引文来源Acegi保护对方法的呼叫_熊熊之家
分享到:
评论

相关推荐

    acegi保护业务方法_basedDatabase

    在"acegi保护业务方法_basedDatabase"这个主题中,我们主要探讨如何使用Acegi Security来保护基于数据库的业务方法,确保只有授权的用户才能访问特定的业务功能。 首先,我们需要了解Acegi Security的核心概念。...

    acegi保护业务方法_basedMemory

    这个“acegi保护业务方法_basedMemory”主题可能是关于如何使用Acegi Security来保护应用程序中的特定业务方法,特别是那些处理敏感数据或关键操作的方法。在这个场景下,“basedMemory”可能指的是基于内存的认证和...

    acegi

    虽然在Spring 3.0之后,Acegi 被Spring Security所取代,但其在当时对Spring社区的贡献是不可忽视的。 1. **Acegi Security的核心概念** - **身份验证(Authentication)**:Acegi 提供了多种身份验证机制,如基于...

    使用 Acegi 保护 Java 应用程序: 续二

    在“使用 Acegi 保护 Java 应用程序:续二”这篇博文中,作者可能深入探讨了如何将 Acegi 集成到 Java 应用程序中,以增强其安全性,特别是对于 Web 应用程序。下面我们将详细讨论 Acegi 的核心概念和使用方法,以及...

    使用 Acegi 保护 Java 应用程序: 续一

    本篇文章是“使用 Acegi 保护 Java 应用程序”系列的续篇,旨在深入探讨 Acegi 的使用方法。在前一篇文章中,我们可能已经介绍了 Acegi 的基本概念和安装步骤。在这里,我们将更进一步,讨论如何配置和实现 Acegi 的...

    Acegi 保护 Java 应用程序

    这份共分三部分的系列文章介绍了 Acegi 安全系统(Acegi Security System),它是用于 JavaTM 企业应用程序的强大的开源安全框架。...您介绍 Acegi 的架构和组件,并展示如何使用它来保护一个简单的 Java 企业应用程序。

    Acegi保护Java 应用程序

    在本文中,我们将深入探讨Acegi安全框架的核心概念、工作原理以及如何在实际项目中使用它来保护我们的Java应用。 首先,Acegi(现已被Spring Security替代)是一个基于Spring的全面安全解决方案,它允许开发者在不...

    使用 Acegi 保护 Java 应用程序: 续三

    这包括对敏感数据进行加密,使用 HTTPS 以保护通信安全,以及定期更新和审核安全配置。 Acegi 与 Spring 深度集成,使得这些最佳实践更容易实施。 最后,Acegi 提供了丰富的日志和审计功能,可以帮助开发者监控应用...

    ACEGI

    13. **与JBoss、Jetty、Resin等容器的集成**:提供对不同服务器环境的支持。 **授权(Authorization)**是确定主体(Principal)是否具有执行特定操作的权限的过程。Acegi Security允许高度自定义的授权规则,可以...

    acegi的使用

    此外,Acegi 还支持通过 Spring AOP 在方法级别实现安全控制,通过代理对象对受保护的方法进行拦截。 11.1.1 安全拦截器 安全拦截器是 Acegi 中的关键组件,它类似于锁舌,阻止未经授权的用户访问受保护的资源。...

    Acegi-spring安全框架

    Acegi的主要目标是实现业务对象方法级别的安全控制,确保URL资源、业务类方法以及领域对象的访问得到适当限制。 1. URL资源的访问控制:Acegi能够设定不同用户群体对网页资源的访问权限。例如,所有用户可以访问...

    spring acegi 详细文档

    在本文中,我们将深入探讨Spring Acegi的核心概念、功能和使用方法。 首先,Acegi的主要目标是保护Spring应用免受非法访问,它提供了丰富的功能来实现用户认证、会话管理、权限控制以及安全相关的异常处理。Acegi的...

    Acegi例子代码+一个很好的学习Acegi的网址

    它可以基于角色、URL、方法或者更复杂的规则进行控制。 3. **会话管理(Session Management)**:Acegi提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 4. **过滤...

    基于java的ACEGI

    2. **授权(Authorization)**:Acegi允许基于角色的访问控制(RBAC),可以设置权限规则来控制用户对资源的访问。这包括访问控制列表(ACL)和方法级别的安全性,确保只有授权用户才能执行特定操作。 3. **会话...

    Acegi详细教程

    Acegi不仅能够保护Web应用系统,还能在更低层次上对方法调用进行安全控制。 **1.1 使用Servlet过滤器保护Web应用系统** 当部署在Web环境中时,Acegi使用Servlet过滤器拦截HTTP请求,以执行身份认证和权限检查。...

    acegi数据库版+方法版

    Acegi Security提供了基于角色的访问控制(RBAC),可以对URL、方法甚至业务对象进行权限检查。在“方法版”中,这可能涉及如何实现基于注解的方法安全,通过在方法上添加如`@Secured`或`@PreAuthorize`等注解来...

Global site tag (gtag.js) - Google Analytics