`
anson_xu
  • 浏览: 514742 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

spring aop控制权限,想要细到method级别

阅读更多
spring aop控制权限,想要细到method级别,但是advisor唔用。不明白!!
这是我的一个spring bean配置


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<!-- 配置这个bean结合action bean的一个属性配置解析method后面带的方法 -->
<bean id="paramResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName">
<value>method</value>
</property>
<property name="defaultMethodName">
<value>index</value>
</property>
</bean>




<!-- 对view进行处理 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
</bean>

<!-- 通过下面的2个bean寻找action bean -->
<bean id="defaultHandlerMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath">
<value>true</value>
</property>
<property name="interceptors">
<list>
<!--<ref bean="frontEndInterceptor" />,可以实现HandlerInterceptor的3个方法,进行3中操作。-->
</list>
</property>
<property name="mappings">
<props>

<prop key="/login.do">loginAction</prop>

</props>
</property>
</bean>
<!-- 登入action bean -->
<bean id="loginAction" class="net.kingbit.actions.LoginAction">
<property name="methodNameResolver">
<ref bean="paramResolver" />
</property>
<property name="view">
<value>/WEB-INF/jsp/default.jsp</value>
</property>

</bean>

<!-- 管理员的bean -->
<bean name="/manager.do" class="net.kingbit.actions.Manager">
<property name="methodNameResolver">
<ref bean="paramResolver" />
</property>
</bean>

<!-- <aop:config>
<aop:pointcut id="servicePointcut"
expression="execution(** net.kingbit.actions.Manager.list*(HttpServletRequest,HttpServletResponse))" />
<aop:advisor advice-ref="aroundAdvice"
pointcut-ref="servicePointcut" order="0" />
</aop:config>
-->
<!-- 环绕通知,实现一个简单的权限检测 -->
<bean id="aroundAdvice" class="net.kingbit.advice.YkAroundAdvice" />
<bean id="before" class="net.kingbit.advice.PermissionBefore"></bean>



<!-- 将通知advice和pointcut链接在一起 -->
<bean id="managerAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<!-- 通知 -->
<property name="advice" ref="aroundAdvice" />
<!-- pointcut -->
<property name="patterns">
<list>
<value>list</value>
<value>test</value>
</list>
</property>
</bean>

<!-- 自动代理,可以代理多个bean -->
<bean id="autoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- <property name="proxyTargetClass" value="true"></property> -->
<property name="beanNames">
<list>
<value>/manager*</value>
</list>
</property>
<property name="interceptorNames">
<list>

<!--<value>managerAdvisor</value>--> <!-- 无效的配置?对程序唔任何效果 -->
<value>aroundAdvice</value><!--这个可以拦截到类下面的所有方法,只是不具体 -->
</list>
</property>
</bean>

</beans>


advice是对权限检测,判断是否有权限调用方法
package net.kingbit.advice;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.web.servlet.ModelAndView;

//@Aspect

public class YkAroundAdvice implements MethodInterceptor {

//@Before("execution(*net.kingbit.actions.Manger.list(HttpServletRequest,HttpServletResponse))")
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("ljkjljljklj");

Object[] arg = invocation.getArguments();
System.out.println("length---" + arg.length);
int  length=arg.length;
if(length!=0)
{HttpServletRequest request = null;
String name = invocation.getMethod().getDeclaringClass().getName()
+ invocation.getMethod();
System.out.println("method name---" + name);

request = (HttpServletRequest) arg[0];
for (int i = 0; i < arg.length; i++) {
System.out.println("arg[" + i + "]---" + arg[i]);
if (arg[i] instanceof HttpServletRequest) {
request = (HttpServletRequest) arg[i];
}
}
HttpSession session = request.getSession();

String permission = (String) session.getAttribute("permission");
if (permission.equals("admin")) {
return invocation.proceed();
}
return new ModelAndView("/WEB-INF/jsp/login.jsp");//没权限跳转到登入页面
}
return null;
}

}



Manager:

package net.kingbit.actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class Manager extends MultiActionController {
public ModelAndView test(HttpServletRequest request,HttpServletResponse response)
{
return new ModelAndView("/WEB-INF/jsp/admin.jsp");
}
public ModelAndView list(HttpServletRequest request,HttpServletResponse response)
{
return new ModelAndView("/index.jsp");
}

}
分享到:
评论
2 楼 anson_xu 2009-01-09  
没传request过来
1 楼 %小樱桃% 2009-01-07  
import javax.servlet.http.HttpServletRequest;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.struts.action.ActionMapping;

public class AuthorityInterceptor implements MethodInterceptor {
// private PermissionManager permissionManager;  
 

public Object invoke(MethodInvocation arg0) throws Throwable {
HttpServletRequest request = null;     
        ActionMapping mapping = null;     
        Object[] args = arg0.getArguments();     
        for (int i = 0 ; i < args.length ; i++ ){
            if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args[i];     
            if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];     
        }
//      从session中得到用户的级别  
        String level = (String)request.getSession().getAttribute("level");
        //如是经理或员工级别则继续,否则,回到登陆页面  
        if ( level != null && (level.equals("emp") || level.equals("mgr"))){  
            return arg0.proceed();  
        }else{  
            return mapping.findForward("login");  
        }
   }     
}


在invoke()方法里面为什么得不到Request对象??
   希望能及时给我个回答·

谢谢

相关推荐

    spring aop权限小实例

    本实例将深入探讨如何在Spring AOP中实现权限控制,以提高代码的可读性和可维护性。 首先,我们要理解AOP的基本概念。AOP允许程序员定义“切面”,这些切面封装了特定的关注点,比如权限检查。然后,这些切面可以在...

    Java之Spring AOP 实现用户权限验证

    通过以上步骤,我们创建了一个基于Spring AOP的权限验证框架,实现了对用户权限的灵活控制。这种方式不仅简化了代码,提高了代码复用性,还使得权限验证策略可以根据需求轻松调整。在实际项目中,还可以结合Spring ...

    Spring AOP简单demo

    3. **安全控制**:检查权限,防止未经授权的访问。 4. **日志记录**:记录操作信息,便于追踪和调试。 5. **缓存管理**:在方法调用前检查是否有缓存结果,避免重复计算。 6. **错误处理**:统一处理异常,提供...

    AOP控制权限编程例子

    在本例子中,我们主要探讨如何利用Spring AOP进行权限控制。权限控制是确保只有授权用户才能访问特定资源的关键机制,这对于任何具有用户界面的应用程序来说都是必不可少的。通过AOP,我们可以创建一个拦截器,该...

    Spring Aop使用实例

    - **安全控制**:权限检查,防止非法访问。 - **缓存管理**:在方法调用前检查缓存,避免不必要的数据库查询。 ### 5. 示例项目`SpringAopPrj`分析 这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了...

    spring之AOP(动态代理)

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...

    spring aop

    在Web项目中,Spring AOP通常用于处理跨多个控制器和业务层方法的通用任务,如记录请求日志、验证权限、事务管理等。通过配置或注解,你可以确保这些逻辑在每次相关方法执行时自动触发,从而提高代码的可读性和可...

    spring aop管理xml版

    在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的设计模式,它扩展了传统的面向对象编程(OOP),使得我们可以将关注点分离,特别是那些横切关注点,如日志、事务管理、权限检查...

    spring security 2.0 的简单配置使用(补)——用aop控制method级权限

    在本文中,我们将深入探讨如何在Spring Security 2.0版本中配置并使用AOP(面向切面编程)来实现方法级别的权限控制。首先,我们需要理解Spring Security的基础概念。 1. **Spring Security基本架构** Spring ...

    springAOP中文文档

    ### Spring AOP 概念与实践 #### 一、AOP 概述 **面向切面编程 (Aspect-Oriented Programming, AOP)** 是一种编程范式,它旨在提高程序的模块化程度,通过分离横切关注点来解决传统面向对象编程中难以处理的问题。...

    spring aop xml 实例

    在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,而Spring AOP(面向切面编程)则是Spring框架中的一个重要组成部分。AOP允许开发者定义“切面”,它是一种将关注点分离的方式,使得我们可以把...

    spring AOP myeclipse 完整代码

    它是对传统面向对象编程(OOP)的一种补充,旨在解决业务逻辑中的横切关注点,如日志记录、事务管理、权限控制等。在OOP中,这些关注点通常会分散在多个类和方法中,导致代码重复且难以维护。而AOP通过将这些关注点...

    spring aop 所需jar包

    要使用Spring AOP,你需要将这两个jar包添加到项目的类路径(classpath)中。对于Maven项目,可以在pom.xml文件中添加相应的依赖: ```xml &lt;groupId&gt;org.aspectj &lt;artifactId&gt;aspectjrt &lt;version&gt;1.x.x...

    使用Spring配置文件实现AOP

    在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...

    spring-aop实例demo

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义“切面”,这些切面封装了应用程序中的交叉关注点,如日志、事务管理、权限检查等。Spring AOP是基于代理的,它可以为普通Java对象(POJOs)...

    Spring AOP 的实现例子(基于XML配置实现)

    Spring AOP,即Spring的面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...

    spring AOP 切面日志 分层打日志

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序进行横向关注点的插入,比如日志记录、事务管理、权限检查等。在这里,我们重点关注如何利用Spring AOP实现分层...

    JDK动态代理 spring aop 的原理

    5. AOP代理的使用:当通过Spring的依赖注入(DI)获取到一个对象时,实际上得到的是一个代理对象。通过这个代理对象调用方法,Spring会自动插入预先定义好的通知逻辑。 总的来说,JDK动态代理是Spring AOP实现的...

    springAOP.docx

    首先,要启用Spring AOP的功能,我们需要在Maven项目的pom.xml文件中引入必要的依赖。如描述所示,至少需要`spring-context`和`spring-aspects`两个包,它们提供了AOP的基础支持。同时,为了简化代码,可能还会引入`...

Global site tag (gtag.js) - Google Analytics