`
theabab
  • 浏览: 42726 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

一个想法 method控制权限(未实践)

阅读更多
通过配置spring  aop拦截器和advice可以实现对action下面的所有方面进行拦截,假如我们要拦截某个具体的方法,却在配置切入点的时候不成功(我没佩成功!),于是换了2个想法:
1:每次调用的时候携带action方法参数:如:login.action?method=xxxxx;用
    String  method=request.getParameter("method");获取method参数
2:例外MVC实现的时候不会全部带上method的参数,例如:login.action,这样不带参数的话,Action里面肯定有一个方法叫login的,会默认寻找。(我的理解!),既然这样,我们可以把login 截取下来,也是action要调用的方法!(想了下,这里可能不会唯一,因为可以带参数!)
而且action里面的方法名都是唯一的。这样我们通过数据库设置这些方法的使用权限,然后实现环绕通知来控制访问权限。

希望高手指点指点。不知可行不可行!
如有实践权限控制的,恳请发一份例子yankang.nd@163.com! 谢谢!


笔记:
生成代理类的代码:
     Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);

package net.kingbit.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

/**
*
* @author yankang <yankang.nd@163.com>
*/
public class DynamicProxy implements InvocationHandler {

    private Object  proxyObj;
    public DynamicProxy(Object object)
    {
        this.proxyObj=object;
    }

    public static Object  factory(Object object)
    {
        Class cls=object.getClass();
        System.out.println("cls name:"+cls.getName());
        return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new DynamicProxy(object));
    }

   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       System.out.println("DynamicProxy invoke!");
       System.out.println("method name:"+method.getName());
       System.out.println("proxy class:"+proxy.getClass());
       if(args!=null)
       {
           for(int i=0;i<args.length;i++)
           {
               System.out.println("args["+i+"] :"+args[i]);
           }
       }
       Object o=method.invoke(proxyObj, args);//java反射调用代理目标类的方法
       return o;

    }

public static void main(String[] args)
{
   List<String> v = null;
//    //DynamicProxy dp=new DynamicProxy(new Vector());
v=(List<String>) DynamicProxy.factory(new ArrayList());
//v.isEmpty();
v.add("bbbb");
//    Computer cb=null;
//    cb=    (Computer) DynamicProxy.factory(new ComputerBuy());
//    cb.buy();
}
}
分享到:
评论
3 楼 theabab 2009-03-27  
metadmin 写道

我想到了2个问题,一起探讨一下:1,方法拦截技术。我觉得这个spring应该可以做到,aop可以做到方法调用层级的切片。(我对spring和aop都不大了解,所以有些词可能不对,内容也会不准确)spring可以在实例化bean的时候动态注入refBean,当然这些都是spring 容器来完成的,包括实例化。spring也提供了对方法的切片和拦截。spring security里面有很多这样的例子。2,方法拦截是否能完全控制住、或者结合其他办法能控制住权限。举例说明:比如某个dao方法是:dao.update( Customer customer ) 这个方法体内,应该做权限判断吧。权限判断逻辑应该和:调用这个方法的用户有关(一般User在Servlet层可以获取)。那么拦截器怎样获取这个User呢?(这点我没用答案,所以想问问)又或者,把dao方法修改为:dao.update( Customer customer, User user )? 如果这样不大合适吧?3, 权限判断逻辑放在哪里呢?这点你的文章没用提到哦。


首先要说明的一点就是权限判断是和业务逻辑独立起来的。我感觉你的想法还是没有分离出来。最近时间比较忙。我也没研究多少!呵呵,等忙完了在看看。
2 楼 metadmin 2009-03-26  
我想到了2个问题,一起探讨一下:
1,方法拦截技术。
我觉得这个spring应该可以做到,aop可以做到方法调用层级的切片。(我对spring和aop都不大了解,所以有些词可能不对,内容也会不准确)
spring可以在实例化bean的时候动态注入refBean,当然这些都是spring 容器来完成的,包括实例化。
spring也提供了对方法的切片和拦截。spring security里面有很多这样的例子。


2,方法拦截是否能完全控制住、或者结合其他办法能控制住权限。
举例说明:比如某个dao方法是:dao.update( Customer customer ) 这个方法体内,应该做权限判断吧。权限判断逻辑应该和:调用这个方法的用户有关(一般User在Servlet层可以获取)。那么拦截器怎样获取这个User呢?(这点我没用答案,所以想问问)
又或者,把dao方法修改为:dao.update( Customer customer, User user )? 如果这样不大合适吧?


3, 权限判断逻辑放在哪里呢?这点你的文章没用提到哦。
1 楼 metadmin 2009-03-26  
“权限管理”圈子欢迎您!

圈子地址:http://accessmanager.group.iteye.com/

相关推荐

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

    `@Secured`接受一个权限字符串数组,只有具有这些权限的用户才能执行该方法。`@PreAuthorize`允许使用SpEL(Spring Expression Language)表达式进行更复杂的权限检查。 5. **自定义访问决策策略** 默认的访问决策...

    nginx对http method的控制修改方法

    例如,当客户端发送一个POST请求时,如果Nginx配置中没有明确允许该方法,则可能会返回405 Method Not Allowed的状态码。 #### 三、源码级修改步骤 ##### 1. 进入Nginx源码目录 首先,需要获取Nginx的源码包,并...

    Method Swizzling 和 AOP 实践1

    Aspect-Oriented Programming(面向切面编程,简称AOP)是另一个与Method Swizzling相关的概念。AOP允许我们在不修改业务代码的情况下,将横切关注点(如日志、事务管理等)与核心业务逻辑分离。在Objective-C中,...

    SystemC用Method方法实现交通灯控制

    交通灯控制是模拟和验证领域的一个经典示例,它能帮助我们理解并实践SystemC的基本概念。 首先,我们需要了解SystemC中的Method方法。在SystemC中,Method方法是一种封装特定操作的方式,这些操作可以在时间调度上...

    Spring权限控制

    以下是一个使用Spring AOP实现权限控制的具体示例: ##### 准备工作 1. **创建Web工程**:首先,创建一个新的Web工程,并为其添加Struts 1.2的支持。 2. **集成Spring**:接下来,将Spring框架集成到项目中。本...

    AOP控制权限编程例子

    通过AOP,我们可以创建一个拦截器,该拦截器在方法调用之前或之后执行,以检查用户的访问权限。 **AOP术语** 1. **切面(Aspect)**:切面是关注点的模块化,它封装了横切关注点,如日志、事务和安全性。 2. **...

    Java零基础-访问控制权限修饰符.md

    - **作用**:当一个类或其成员被标记为`public`时,意味着它可以被任何其他类访问,无论这些类是否位于同一个包内。 - **使用场景**:通常用于公开的方法、构造函数和类,特别是当希望外部类能够访问这些元素时。 ...

    struts2拦截器控制权限

    每个拦截器可以看作是一个独立的功能模块,如日志记录、事务处理或权限验证等。通过配置,我们可以决定拦截器的执行顺序,以及哪些Action需要经过哪些拦截器。 在权限控制的场景下,Struts2拦截器可以用来检查用户...

    STM32电机控制器开源FOC算法详解:单电阻与三电阻采样代码实践及无传感器观测器技术,STM32电机控制器开源FOC算法详解:单电阻与三电阻采样代码分享,无感算法观测器与Foc method开源源代

    STM32电机控制器开源FOC算法详解:单电阻与三电阻采样代码实践及无传感器观测器技术,STM32电机控制器开源FOC算法详解:单电阻与三电阻采样代码分享,无感算法观测器与Foc method开源源代码研习,STM32电机控制器,STM...

    3C Method 3C Method

    1997年,欧洲共同体资助了一个名为ACUMAP的试点项目,该项目旨在验证“客户营销方法”的有效性,并支持相关的软件、工具和培训资料的开发。ACUMAP项目的成功最终促成了现代意义上的CRM——客户关系管理的发展。 3C ...

    反射和注解的妙用-struts2权限的控制

    为了实现基于方法级别的权限控制,我们需要定义一个自定义注解,用于标识哪些方法需要进行权限检查以及需要哪种权限。同时,还需要编写一个自定义拦截器来处理这些注解,并在运行时检查用户的权限。 **1. 自定义...

    Method Swizzling示例

    **方法交换(Method Swizzling)详解** 在iOS和Mac OS X开发中,Objective-C作为主要的编程语言,提供了一种独特且强大的特性...在SwizzlingTest文件中,你可以找到一个实际的示例,通过实践来更好地掌握这种方法。

    Interval Finite Element Method with MATLAB

    《Interval Finite Element Method with MATLAB》这本书由Sukantan Nayak与Snehashish Chakraverty合著,由学术出版社(Academic Press)出版,是Elsevier旗下的一个出版品牌。本书提供了一个有效的途径来研究不确定...

    权限设计文档

    在数据库设计上,我们可以创建一个权限列表,包括权限ID、名称、动作(Action)和方法(Method)。权限表用于存储所有可用的权限类型。用户表则包含用户ID和用户名,同时,用户表有一个字段用于存储用户的权限ID,多...

    Struts2框架的权限控制研究

    在Struts2中,控制器由FilterDispatcher负责,它是一个Servlet过滤器,负责接收用户的请求并将其转发给合适的Action对象处理;模型主要由Action对象组成,它们负责业务逻辑的处理;视图则通常是由JSP页面或者其他...

    kernel method

    Kernel Method是模式识别和机器学习中的一种重要方法,用于解决非线性问题。Kernel Method的核心思想是将低维空间中的数据映射到高维空间中,使得原本非线性可分的数据变得线性可分。 在Kernel Method中,核函数...

    mvc通过反射获取action方法(适用于权限控制)

    在MVC框架中,权限控制是一个非常重要的功能,它确保了用户只能访问他们被授权的功能模块。本文将详细介绍如何利用反射技术来获取MVC应用中的所有Action方法,并以此为基础实现权限控制。 #### 一、反射的基本概念 ...

    FastMethodInvoker.rar

    在`FastMethodInvoker.rar`这个压缩包文件中,可能包含了一个自定义实现的`FastMethodInvoker`类或者一个演示如何使用这种技术的示例项目。这个类或项目可以帮助开发者理解和应用这种快速调用方法,从而在特定情况下...

    swift-利用AOP的思想通过方法交换(MethodSwizzle黑魔法修改ios系统类库方法)的做法

    AOP允许我们在不修改原有代码结构的情况下,插入额外的逻辑,如日志记录、性能监控或者权限控制等。本文将深入探讨如何利用AOP的思想,通过方法交换(Method Swizzling)这一“黑魔法”来修改iOS系统类库的方法,...

    Java反射值Method

    本文将深入探讨Java反射中的一个关键组件——`Method`,以及如何利用`Class`类的多种方法来获取和操作类的方法。 ### 一、`Method`与`Class`的关系 在Java反射中,`Method`类提供了访问类或接口声明的公共成员方法...

Global site tag (gtag.js) - Google Analytics