设计自己的Annotation实现方法的鉴权

原创 2012年03月27日 00:54:27
1、参照 如下文章- 实战篇:设计自己的Annotation 
http://www.iteye.com/topic/36659 

2、 
Java代码 
  1. import java.lang.annotation.ElementType;  
  2. import java.lang.annotation.Retention;  
  3. import java.lang.annotation.RetentionPolicy;  
  4. import java.lang.annotation.Target;  
  5.   
  6. @Target(ElementType.METHOD) //规定注解可以应用的范围  
  7. @Retention(RetentionPolicy.RUNTIME)     //规定注解可以被反射机制读取  
  8. public @interface NeedLogin {  
  9.   
  10. }  
  11.   
  12. mport java.util.Map;  
  13. import java.util.Set;  
  14.   
  15. import javax.servlet.http.HttpSession;  
  16.   
  17. import org.aopalliance.intercept.MethodInterceptor;  
  18. import org.aopalliance.intercept.MethodInvocation;  
  19. import org.apache.struts.Globals;  
  20.   
  21. import com.xasxt.cake.common.WebContext;  
  22.   
  23. public class SafeAsepct implements MethodInterceptor {  
  24.   
  25.     public Object invoke(MethodInvocation mi) throws Throwable {  
  26.         //判读用户身份  
  27.         HttpSession session = WebContext.getSession();  
  28.         if (session.getAttribute("USER_LOGIN")==null) {  
  29.             //如果没有,返回null。如果有,返回注解对象  
  30.             NeedLogin needLogin = mi.getMethod().getAnnotation(NeedLogin.class);  
  31.               
  32.             if (needLogin!=null) {  
  33.                 String uri = WebContext.getRequest().getRequestURI() + "?";  
  34.                 //Key : String, Value : String[]  
  35.                 Map map = WebContext.getRequest().getParameterMap();  
  36.                 Set keys = map.keySet();  
  37.                 for (Object key : keys) {  
  38.                     uri += key + "=";  
  39.                     //简化了问题  
  40.                     uri += ((String[])map.get(key))[0] + "&";  
  41.                 }  
  42.                 System.out.println("uri = " + uri);  
  43.                 WebContext.getSession().setAttribute("LAST_URI", uri);  
  44.                   
  45.                 throw new LoginException("您需要登录才能使用此功能!");  
  46.             }  
  47.         }  
  48.         return mi.proceed();    //chain.doFilter(req, myRes);  
  49.           
  50.     }  
  51.   
  52.     public static void main(String[] args) {  
  53.         WebContext.getSession();  
  54.     }  
  55.   
  56. }  
  57.   
  58.   
  59. <!-- 抽象Bean (模板) -->  
  60.     <bean id="BizTemplate"  
  61.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
  62.         abstract="true">  
  63.         <property name="transactionManager" ref="tm"></property>    <!-- 谁来代理 -->  
  64.         <property name="proxyTargetClass" value="true"></property>  <!-- 代理方式true:cglib, false:动态代理 -->  
  65.         <property name="transactionAttributes">  
  66.             <props>  
  67.                 <!-- 事务的传播行为 -->  
  68.                 <prop key="get*">PROPAGATION_REQUIRED, readOnly</prop>  
  69.                 <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>  
  70.                 <prop key="*">PROPAGATION_REQUIRED</prop>  
  71.             </props>  
  72.         </property>  
  73.     </bean>  
  74.   
  75.     <bean id="cakeBizTarget" class="com.xasxt.cake.biz.impl.CakeBiz">  
  76.         <property name="cakeDAO" ref="CakeDAO"></property>  
  77.     </bean>  
  78.   
  79.     <bean id="shopBiz" parent="BizTemplate">  
  80.         <property name="target" ref="shopBizTarget"></property> <!-- 代理谁? -->  
  81.     </bean>  
  82.   
  83.     <bean id="cakeBiz2" parent="BizTemplate">  
  84.         <property name="target" ref="cakeBizTarget"></property> <!-- 代理谁? -->  
  85.     </bean>  
  86.   
  87.     <!-- 安全切面 -->  
  88.     <bean id="safe" class="com.xasxt.cake.aspect.SafeAsepct" />  
  89.   
  90.     <!-- 配置代理 -->  
  91.     <bean id="cakeBiz" class="org.springframework.aop.framework.ProxyFactoryBean">  
  92.         <property name="target" ref="cakeBiz2"></property>  
  93.         <property name="interceptorNames" value="safe"></property>  
  94.     </bean>  

自己动手实现Java注解(Java Annotation in Action)

引子写代码的每个同学估计都对注解(annotation)并不陌生,至少也用过@Override这样的注解。Java中的注解是个很神奇的东西,用了注解就可以少些很多代码,但是有没有想过这些注解呢如何实现...
  • doc_sgl
  • doc_sgl
  • 2015年12月21日 00:19
  • 7511

设计自己的Annotation

第一部分:了解一下java1.5起默认的三个annotation类型: 一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。 一个是@Deprecated:建议别人不要使...
  • joy_cz
  • joy_cz
  • 2007年03月24日 01:51
  • 509

设计自己的Annotation

 Annotation在java的世界正铺天盖地展开,有空写这一篇简单的annotations的文章,算是关于Annotation入门的文章吧,希望能各位们能抛砖,共同学习...... 不讲废话了,实...
  • hdy007
  • hdy007
  • 2007年03月15日 15:13
  • 729

Spring AOP在鉴权和日志中的应用

HTTP 接口鉴权 首先让我们来想象一下如下场景: 我们需要提供的 HTTP RESTful 服务, 这个服务会提供一些比较敏感的信息, 因此对于某些接口的调用会进行调用方权限的校验, 而某些不...
  • limengliang4007
  • limengliang4007
  • 2017年11月29日 00:37
  • 74

APP接口设计安全问题-app接口鉴权

我的问题是,如果不做安全相关处理的话,一些可能改变数据库的操作可能会遭遇垃圾数据提交什么的,毕竟要找到这些信息只要找个http包就可以了 系统无用户登录 新手问题(从来没做过服务端开发),如果可以...
  • u013074999
  • u013074999
  • 2016年12月10日 15:43
  • 1751

spring中动态代理的实现(annotation形式实现)

applicationContext.xml中添加,然后 @Aspect @Component public class LogInterceptor{}相当于implements Invoca...
  • a772394795
  • a772394795
  • 2014年12月13日 22:54
  • 445

认证鉴权与API权限控制在微服务架构中的设计与实现(一)

引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现。 1. 背景 最近在做...
  • M2l0ZgSsVc7r69eFdTj
  • M2l0ZgSsVc7r69eFdTj
  • 2017年10月26日 00:00
  • 1202

Android开发 打造自己的Annotation框架

最近在回顾注解和反射方面的知识。 之前在项目开发过程中,也曾经体验过ButterKnife的注解,想结合反射和注解自己写一个框架。结合着大牛的博客,和自己的理解。实现了Activity加载layou...
  • lizhaowei213
  • lizhaowei213
  • 2016年04月02日 17:03
  • 293

自己设计线程池

一,线程池的基本要素 线程池一般需要一个线程管理类: ThreadPoolManager,其作用有:   1)提供创建一定数量的线程的方法。主线程调用该方法,从而创建线程。创建的线程执行自己的例程,...
  • seulzz
  • seulzz
  • 2017年08月20日 17:24
  • 181

Spring自定义annotation实现

spring自定义annotation
  • c275046758
  • c275046758
  • 2017年06月30日 17:12
  • 683
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计自己的Annotation实现方法的鉴权
举报原因:
原因补充:

(最多只允许输入30个字)