Struct2_定义拦截器并使用注解方式作用在Action的方法中
一、目的:通过在方法上加注解控制哪些方法需要登陆后才能访问
- 定义配置文件
struts.xml添加节点1234567891011121314151617181920<packagename="custom-default"extends="struts-default"><interceptors><!-- 声明自定义的权限控制拦截器 --><interceptorname="loginInterceptor"class="interceptors.LoginInterceptor"/><!-- 把自定义的权限控制拦截器和默认的拦截器栈加到新的自定义的拦截器栈 --><interceptor-stackname="myInterceptors"><interceptor-refname="loginInterceptor"/><interceptor-refname="defaultStack"/></interceptor-stack></interceptors><!-- 指定新的自定义的拦截器栈为默认的拦截器栈,这样自定义的权限控制拦截器就可以发挥作用了 --><!-- 这里name属性值对应的是上述interceptor-stack name属性值 --><default-interceptor-refname="myInterceptors"></default-interceptor-ref><!-- 这里对应拦截器中return Action.LOGIN对应的页面--><global-results><resultname="login">/WEB-INF/content/LoginInfo/login.jsp</result></global-results></package> 定义注解
注解主要是作用在方法上,拦截器根据方法是否定义注解来处理登陆判断
123456789101112131415packageannotations;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target({ElementType.METHOD})@Retention(value = RetentionPolicy.RUNTIME)public@interfaceAuthority {/*** @return The namespace value.*/String value();}定义拦截器
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748packageinterceptors;importjava.lang.reflect.Method;importjava.util.Map;importorg.apache.struts2.convention.annotation.InterceptorRef;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;importannotations.Authority;importcommon.Constants;@SuppressWarnings("serial")publicclassLoginInterceptorextendsAbstractInterceptor {@OverridepublicString intercept(ActionInvocation invocation)throwsException {String methodName = invocation.getProxy().getMethod();Class clazz = invocation.getAction().getClass();// 获取类对象Method currentMethod = clazz.getMethod(methodName);//获取拦截的方法//方法上添加了注解if(currentMethod.isAnnotationPresent(Authority.class)) {// 取得当前请求的注解的actionActionContext context = invocation.getInvocationContext();Map session = context.getSession();//Constants.UserName=="UserName"String user = (String) session.get(Constants.UserName);System.err.println("拦截器起作用");if(user ==null)// 未登陆,跳转到登录页{System.err.println("进入拦截器:未登陆");context.put("tip","你还没有登录");returnAction.LOGIN;}else{//已登录,继续后续流程System.err.println("进入拦截器:已登录");returninvocation.invoke();}}else{System.err.println("进入拦截器:没有使用注解");returninvocation.invoke();}}}- 定义Action类及方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package action;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.InterceptorRef;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.apache.struts2.interceptor.validation.SkipValidation;import annotations.Authority;import common.Constants;import org.apache.struts2.convention.annotation.InterceptorRefs;@SuppressWarnings("serial")@ParentPackage("custom-default") //这里对应的配置文件中包的名称public class LoginAction extends SuperActionSupport { @Action(value = "loginValidate", results = { @Result(name = "success", location = "/WEB-INF/content/LoginInfo/success.jsp"), @Result(name = "input", location = "/WEB-INF/content/LoginInfo/login.jsp") }) @Authority("") //定义注解后未登录回到登陆页,否则执行后续步骤 public String loginValidate() throws Exception { return SUCCESS; }} |
内置的注解@InterceptorRefs/@InterceptorRef只能作用在类文件上,不能作用到方法上(从其@Target属性即可看出)
类上的注解@ParentPackage("custom-default")必须对应structs.xml中package的name属性,否则注解不起效
structs.xml中default-interceptor-ref的name值对应的是interceptor-stack的name值,否则注解不起效
Struct2_定义拦截器并使用注解方式作用在Action的方法中的更多相关文章
- springmvc自己定义拦截器
Spring MVC也能够使用拦截器对请求进行拦截处理,用户能够自己定义拦截器来实现特定的功能,自己定义的拦截器必须实现HandlerInterceptor接口. 直接看下样例: package co ...
- struts自己定义拦截器--登录权限控制
说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...
- struts2学习笔记(5)---自己定义拦截器
什么是拦截器? struts2中拦截器分为Struts2定义好的拦截器和自己定义的拦截器. 其作用是在一个Action运行之前进行拦截,在Action运行之后又增加某些操作. 实现原理 当请求一个Ac ...
- Struts2通过自己定义拦截器实现登录之后跳转到原页面
这个功能对用户体验来说是非常重要的.实现起来事实上非常easy. 拦截器的代码例如以下: package go.derek.advice; import go.derek.entity.User; i ...
- jquery.ajax与axios及定义拦截器
首先导入jquery和axios包 jquery.ajax function reg(){ var username = $("#username").val(); var pas ...
- Struts2_day04--自定义拦截器_Struts2的标签库_表单标签
自定义拦截器 1 在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可能没有要使用的功能,这个时候需要自己写拦截器实现功能 2 拦 ...
- CXF实战之自己定义拦截器(五)
CXF已经内置了一些拦截器,这些拦截器大部分默认加入到拦截器链中,有些拦截器也能够手动加入,如手动加入CXF提供的日志拦截器.也能够自己定义拦截器.CXF中实现自己定义拦截器非常easy.仅仅要继承A ...
- struts2拦截器加自定义注解实现权限控制
https://blog.csdn.net/paul342/article/details/51436565 今天结合Java的Annotation和Struts2进行注解拦截器权限控制. 功能需求: ...
- Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
上一篇<更加简练的编程体验>提供了最新版本的Dora.Interception代码的AOP编程体验,接下来我们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义.采用“ ...
随机推荐
- 【UOJ#9】vfk的数据
我感觉这题可以出给新高一玩2333 #include<bits/stdc++.h> #define N 10005 using namespace std; string s[N]; in ...
- 小白成长记-----python实现注册的小程序
# 3.写一个注册的程序,输入username,密码,# 密码确认,输入的账号和密码不能为空,两次输入密码必须一致,# 用户名不能重复,错误次数四次 .注册成功提示成功# 把注册账号密码信息的写到文件 ...
- ltsdangerous加密解密
前言 在做QQ第三方登录时,用户跳转到QQ登录界面登录成功后,会在URL返回一个code参数.前端把code发送给后端.后端收到后,会查询出openid.然后判断openid是否存在,如果存在就可以绑 ...
- springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置
web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...
- socket编程之select(),poll(),epoll()
socket编程,通信 client端 socket() ----->connect() ------->recv() -----> close(); server端 socket ...
- Django视图之ORM更改数据库连接——配置MySQL库
Django中创建app01应用 python manage.py startapp app01 1. 首先安装pymsql模块 # Python3中 pip3 install pymysql 在 p ...
- 微信小程序实战篇-下拉刷新与加载更多
下拉刷新 实现下拉刷新目前能想到的有两种方式 1. 调用系统的API,系统有提供下拉刷新的API接口 2. 监听scroll-view,自定义下拉刷新,还记得scroll-view里面有一个binds ...
- 如何实现artTemplate模板的可重用性,以此框架打造自己的自定义组件
问题的提出: 我们为什么非得要引入artTemplate来进行JSON数据的渲染呢? http://dagmom.iteye.com/blog/1671498http://bbs.csdn.net/t ...
- PHP数组转对象,对象转数组
废话不多,直接上代码: <?php class object_array{ //数组转对象 public static function array_to_object($e){ if(gett ...
- ionic3包还原使用yarn命令执行步骤(解决ionic3懒加载报找不到 module的错误)
使用cnpm 还原ionic3.6的依赖包的时候 可以正常还原,但是使用懒加载就会报找不到 module 的错误.最简单的解决办法是删除node_modules 挂个vpn 重新执行npm insta ...