设计自己的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>  

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

引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第三篇,本文重点讲解token以及API级别的鉴权。本文对涉及到的大部分代码进行了分析,欢迎订阅本系列文章。 1...

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

引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第二篇,本文重点讲解用户身份的认证与token发放的具体实现。 1. 系统概览 在上一篇《认证...

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

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

跨域实现用户鉴权1

  • 2017年06月13日 02:53
  • 3.69MB
  • 下载

# RESTful登录(基于token鉴权)的设计实例

使用场景现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西。申请成功后,后面其他的支付请求都要带上这个token,...

App RESTful登录设计(基于Spring及Redis的Token鉴权)

什么是REST REST(Representational State Transfer)是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的...

RESTful登录设计(基于Spring及Redis的Token鉴权)

文章来自  http://blog.csdn.net/gebitan505/article/details/51614805 什么是REST REST(Representational S...

RESTful登录设计(基于Spring及Redis的Token鉴权)

什么是REST REST(Representational State Transfer)是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的主要...

配置 influxDB 鉴权及 HTTP API 写数据的方法

本文简要描述如何为 InfluxDB 开启鉴权和配置用户管理权限(安装后默认不需要登录),以及开启鉴权后如何使用 HTTP API 写数据。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计自己的Annotation实现方法的鉴权
举报原因:
原因补充:

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