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");
}
}
分享到:
相关推荐
本实例将深入探讨如何在Spring AOP中实现权限控制,以提高代码的可读性和可维护性。 首先,我们要理解AOP的基本概念。AOP允许程序员定义“切面”,这些切面封装了特定的关注点,比如权限检查。然后,这些切面可以在...
通过以上步骤,我们创建了一个基于Spring AOP的权限验证框架,实现了对用户权限的灵活控制。这种方式不仅简化了代码,提高了代码复用性,还使得权限验证策略可以根据需求轻松调整。在实际项目中,还可以结合Spring ...
3. **安全控制**:检查权限,防止未经授权的访问。 4. **日志记录**:记录操作信息,便于追踪和调试。 5. **缓存管理**:在方法调用前检查是否有缓存结果,避免重复计算。 6. **错误处理**:统一处理异常,提供...
在本例子中,我们主要探讨如何利用Spring AOP进行权限控制。权限控制是确保只有授权用户才能访问特定资源的关键机制,这对于任何具有用户界面的应用程序来说都是必不可少的。通过AOP,我们可以创建一个拦截器,该...
- **安全控制**:权限检查,防止非法访问。 - **缓存管理**:在方法调用前检查缓存,避免不必要的数据库查询。 ### 5. 示例项目`SpringAopPrj`分析 这个项目很可能是包含了一个Spring AOP的实战例子,可能包含了...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
在Web项目中,Spring AOP通常用于处理跨多个控制器和业务层方法的通用任务,如记录请求日志、验证权限、事务管理等。通过配置或注解,你可以确保这些逻辑在每次相关方法执行时自动触发,从而提高代码的可读性和可...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的设计模式,它扩展了传统的面向对象编程(OOP),使得我们可以将关注点分离,特别是那些横切关注点,如日志、事务管理、权限检查...
在本文中,我们将深入探讨如何在Spring Security 2.0版本中配置并使用AOP(面向切面编程)来实现方法级别的权限控制。首先,我们需要理解Spring Security的基础概念。 1. **Spring Security基本架构** Spring ...
### Spring AOP 概念与实践 #### 一、AOP 概述 **面向切面编程 (Aspect-Oriented Programming, AOP)** 是一种编程范式,它旨在提高程序的模块化程度,通过分离横切关注点来解决传统面向对象编程中难以处理的问题。...
在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,而Spring AOP(面向切面编程)则是Spring框架中的一个重要组成部分。AOP允许开发者定义“切面”,它是一种将关注点分离的方式,使得我们可以把...
它是对传统面向对象编程(OOP)的一种补充,旨在解决业务逻辑中的横切关注点,如日志记录、事务管理、权限控制等。在OOP中,这些关注点通常会分散在多个类和方法中,导致代码重复且难以维护。而AOP通过将这些关注点...
要使用Spring AOP,你需要将这两个jar包添加到项目的类路径(classpath)中。对于Maven项目,可以在pom.xml文件中添加相应的依赖: ```xml <groupId>org.aspectj <artifactId>aspectjrt <version>1.x.x...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义“切面”,这些切面封装了应用程序中的交叉关注点,如日志、事务管理、权限检查等。Spring AOP是基于代理的,它可以为普通Java对象(POJOs)...
Spring AOP,即Spring的面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序进行横向关注点的插入,比如日志记录、事务管理、权限检查等。在这里,我们重点关注如何利用Spring AOP实现分层...
5. AOP代理的使用:当通过Spring的依赖注入(DI)获取到一个对象时,实际上得到的是一个代理对象。通过这个代理对象调用方法,Spring会自动插入预先定义好的通知逻辑。 总的来说,JDK动态代理是Spring AOP实现的...
首先,要启用Spring AOP的功能,我们需要在Maven项目的pom.xml文件中引入必要的依赖。如描述所示,至少需要`spring-context`和`spring-aspects`两个包,它们提供了AOP的基础支持。同时,为了简化代码,可能还会引入`...