`
www-hello
  • 浏览: 100706 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex + Spring + Annotaion 权限(登录)验证

阅读更多

     在Flex开发中,Flex端后台(Java)时,不仅要在前台根据权限对一些功能进行屏蔽限制,也要在后台进行拦截,下面使用spring的aop和自定义annotation来演示登录管理功能。
    自定义annotation: AuthLogin,为了对一些不需要登录验证的方法进行标记。

 

package test.auth;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//注解保持到运行时
@Retention(value=RetentionPolicy.RUNTIME)
//注解可以加在方法上
@Target(value={ElementType.METHOD})
public @interface AuthLogin {
	boolean ignore() default false;
	//当ignore为true时,不对调用进行是否登录的验证
}
 

Spring拦截器类AuthPermission,对前台调用进行拦截,如果没有登录,抛出NoLoginException,如果被调用的方法存在注解AuthLogin并且ignore的值为true则进行放行。

package test.auth;

import java.lang.reflect.Method;
import test.constant.TscConstant;
import test.exception.NoLoginException;
import test.user.model.UserVO;
import test.util.HttpServletUtils;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;

public class AuthPermission {

	private static final Logger log = Logger.getLogger(AuthPermission.class);

	public void doAccessCheck(JoinPoint joinPoint) throws Throwable {

		// 获取连接点的方法签名对象
		MethodSignature joinPointObject = (MethodSignature) joinPoint.getSignature();
		// 连接点对象的方法
		Method method = joinPointObject.getMethod();

		AuthLogin loginAnnotion = method.getAnnotation(AuthLogin.class);
		//取被调用方法上的注解
		System.out.println("------" + joinPoint.getTarget().getClass().getName() + "." + method.getName() + "(...)");
		if (loginAnnotion != null) {
			//注解 AuthLogin存在,并且ignore的值为true,忽略验证
			if (loginAnnotion.ignore() == true) {
				// 忽略登录验证
			} else {
				//验证登录
				isLogin();
			}
		} else {
				//验证登录
			isLogin();
		}
	}

	private void isLogin() {
		//session中取登录成功后,放入的标记对象
UserVO user = (UserVO) HttpServletUtils.getSession().getAttribute(TscConstant.LOGIN_USER);
		if (user == null) {
			log.error("登录验证失败,IP:" + HttpServletUtils.getRequestIp());
			throw new NoLoginException("请重新登录");
		}
	}
}
 

没有登录Exception:

 

package test.exception;

public class NoLoginException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	public NoLoginException() {
		super();
	}

	public NoLoginException(String message, Throwable cause) {
		super("[" + message + "]", cause);
	}

	public NoLoginException(String message) {
		super("[" + message + "]");
	}

	public NoLoginException(Throwable cause) {
		super(cause);
	}

}
 

 

spring配制文件中对aop进行配制:对所有business包中的方法进行拦截(Before前置通知)。

<bean id="checklogin" class="test.auth.AuthPermission" />
	
<aop:config>  
	<aop:pointcut id="invokeAuth"   
		  expression="execution(* test.*.business.*.*(..))"/>  
	<aop:aspect id="loginAspect" ref="checklogin">  
		<aop:before pointcut-ref="invokeAuth" method="doAccessCheck"/>  
	</aop:aspect>  
</aop:config>  
 

 

Flex端对异常进行捕获,并进行提示:
如使用RemoteObject对象的fault引用的方法进行提示(fault=”MyAlert.show(event.fault.faultString);”),
自定义的Alert类

package test.swf.util
{
	import flash.display.Sprite;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	
	public class MyAlert extends Alert
	{
		private static const NO_LOGIN_EXCEPTION:String = "test.exception.NoLoginException";
		
		public static function show(text:String = "", title:String = "",
									flags:uint = 0x4 /* Alert.OK */, 
									parent:Sprite = null, 
									closeHandler:Function = null, 
									iconClass:Class = null, 
									defaultButtonFlag:uint = 0x4 /* Alert.OK */):Alert
		{
			if(text == null || text.length ==0){
				text = "";
			}
			else
			{
				if(text.indexOf(NO_LOGIN_EXCEPTION,0)!= -1){
				//捕获到NoLoginException,改变消息框关闭函数,使其跳转到登录页
					closeHandler = toLoginPage;
				}
				
				var startIndex:int = text.indexOf("[",0);
				var endIndex:int = text.indexOf("]",0);
				if(startIndex != -1 && endIndex != -1 && startIndex < endIndex){
					text= text.substring(text.indexOf("[") ,text.indexOf("]"));
				}
			}
			return Alert.show( text, title,
				flags, 
				parent, 
				closeHandler, 
				iconClass, 
				defaultButtonFlag);                    	
		}
		//跳转到登录页,简单实现
		private static function toLoginPage(event:CloseEvent = null):void{
			var url:URLRequest=new URLRequest("index.html");
			navigateToURL(url, "_self");
		}
	}
}
 

 

完成。

 

0
0
分享到:
评论

相关推荐

    spring+hibernate annotaion

    在本项目中,"spring+hibernate annotaion"指的是利用注解(Annotation)的方式整合Spring和Hibernate,实现一个全注解的应用。这种方式可以简化配置,提高开发效率,并且使得代码更加简洁易读。 Spring框架是Java...

    Spring3.0中annotaion的运用

    在Spring 3.0版本中,注解(Annotation)的应用极大地简化了框架的配置和代码的编写,使得Java开发者能够更加优雅地实现依赖注入、AOP(面向切面编程)等核心功能。本文将深入探讨Spring 3.0中注解的运用,包括其重要...

    Spring Annotaion Support详细介绍及简单实例

    Spring框架作为Java领域内最为流行的企业级应用开发框架,其核心特点之一便是对依赖注入和面向切面编程(AOP)的优秀支持。Spring通过一系列的扩展点和钩子(hook),允许开发者自定义容器行为,其中...

    流程管理系统,rbac,dwr

    该项目使用了JBPM4,并对JBPM4进行预研,掌握JBPM4的使用,主要是JPDL和JBPM4常用API,并完成Extjs3+Struts2+Spring+Hibernate+JBPM4+Annotaion框架的搭建和规划,并对故障单部分进行设计和编码,应用工作流JBPM4...

    Spring  AOP实现方法大全

    【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...

    annotaion-hibernate

    【标题】:“annotaion-hibernate” 涉及的关键技术是Hibernate注解,这是一个针对初学者的教程,旨在深入讲解如何在Java应用程序中使用Hibernate框架的注解进行对象关系映射(ORM)。 【描述】:Hibernate注解是...

    hibernate annotaion api 中文与英文版

    - `@Transactional`: 在服务层方法上标注,启用Spring管理的事务。 - `@Cacheable`, `@CacheRegion`: 配置实体或查询结果的缓存,提高性能。 **6. 验证注解** - Hibernate Validator提供了丰富的验证注解,如`@Not...

    练习annotaion

    - **依赖注入**:Spring框架通过`@Autowired`和`@Qualifier`等注解实现对象之间的依赖关系自动装配。 - **配置管理**:在微服务框架中,如Docker容器化应用,`@Dockerfile`注解可以帮助自动生成Dockerfile。 - **...

    从零开始学SpringBoot

    以前spring开发需要配置一大堆的xml,后台spring加入了annotaion,使得xml配置简化了很多,当然还是有些配 置需要使用xml,比如申明component scan等。前段时间发现了spring开了一个新的model spring boot,主要思想是...

    swagger-api-annotaion_inputFiles.lst_swagger-ui自定义注解api_swagger_

    在这个名为"swagger-api-annotaion_inputFiles.lst_swagger-ui自定义注解api_swagger_"的资源中,我们将探讨如何使用Swagger的注解来增强Spring Boot应用中的API文档,并自定义Swagger UI以适应特定项目需求。...

    smartTrinity_script_9_trinity_fa_annotaion_GPL2.0_20230324.zip

    《smartTrinity_script_9_trinity_fa_annotaion_GPL2.0_20230324.zip:深度解析与应用》 在生物信息学领域,`smartTrinity`是一个常用的工具,用于组装RNA-seq数据,构建转录本草图,特别是对于非模式生物或低覆盖...

    java Annotaion实现菜单和工具栏国际化

    这是利用java Annotation实现的菜单和工具栏国际化的实例,是《java学习脚印: 反射与注释(Annotation)》一文中综合实例的例子。博客参见:http://blog.csdn.net/wangdingqiaoit/article/details/20130539

    struts2 annotaion

    Struts2 Annotation是Struts2框架的一个特性,它允许开发者使用Java注解的方式来替代XML配置文件,简化Action类与URL的映射关系。这个特性主要由`struts2-convention-plugin`插件提供支持,因此在使用前需要将对应的...

    Iono.Container:spring框架风格PHP服务容器库(带注解)

    Iono.Container关于扩展照明/容器的Spring框架样式容器库Iono.Container 是一个 PHP 服务容器(带注解) 像 Spring 框架样式注释 (java) 安装composer.json " require " : { " php " : " &gt;=5.4 " , " ext-tokenizer ...

    abhc:“ABHC”指Annotaion Binding Http Cilent。 这是和俊英一起学习的

    ABHC,全称为"Annotaion Binding Http Client",是一个基于Java编程语言的HTTP客户端库。这个库的主要目的是简化HTTP请求的处理,通过注解的方式来绑定请求参数和响应数据,从而提供更加直观和便捷的API使用体验。在...

    zk-ucc:基于zookeeper的统一配置中心实现

    1、Annotaion 这无疑是最简洁、优雅的方式 2、控制台配置 3、java原生 项目如何接入统一配置? 主要通过三种方式:这三种都需要添加相关的mvn依赖(jar包), 然后就可以在你的项目使用Annotation了 1、spring接入 2...

    get-annotation-methods-maven-plugin

    获取注释方法行家插件 要运行Maven插件: 将插件包括在您的项目中。 例如,从cmd行执行mvn get-annotation-methods:find -DinterfaceNames =“ Event,XmlElement,Event3”。 这将返回包含以上任何注释名称的...

    Pafa4新特性指南1.0.1苏秩

    - **Import配置文件**和**支持Annotaion**:与App层类似,优化配置并利用注解简化配置和编码。 - **APP调用新方式**:提供新的API或方法进行Web层的调用。 - **WebCommonInterceptor**:可能是一种统一的拦截器...

Global site tag (gtag.js) - Google Analytics