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框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义.采用“ ...
随机推荐
- FineReport——JS二次开发(局部刷新)
在FR中,可以通过在form表单设置多个报表模板,然后通过对某一模板刷新实现局部刷新的功能,在cpt模板中,由于只存在一个模板,所以无法实现局部刷新. 其实,最好的局部刷新办法是自定义一个页面,然后添 ...
- 2017百度春招<度度熊买帽子的问题>
题目: 度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同.度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少? 数组中找到第三小的数字 注意边界条件 用STL中的set来 ...
- ltsdangerous加密解密
前言 在做QQ第三方登录时,用户跳转到QQ登录界面登录成功后,会在URL返回一个code参数.前端把code发送给后端.后端收到后,会查询出openid.然后判断openid是否存在,如果存在就可以绑 ...
- 《java并发编程实战》读书笔记5--任务执行, Executor框架
第6章 任务执行 6.1 在线程中执行任务 第一步要找出清晰的任务边界.大多数服务器应用程序都提供了一种自然的任务边界选择方式:以独立的请求为边界. -6.6.1 串行地执行任务 最简单的任务调度策略 ...
- WordPress函数query_posts用法汇总
最近经常有网友跟我咨询WordPress函数query_posts的相关用法,说起来query_posts实在是太强大,参数无数,用法更是无数,如果让我说它的用法,我根本没法一一说清楚.开始之前,你可 ...
- Flexigrid默认是可以选择多行
1.Flexigrid默认是可以选择多行,那么如何设置其只能选一行呢?今天看了看Flexigrid的源码,发现有个属性可以控制: $(this).click(function (e) { var ob ...
- react native 增加react-native-storage
现时需要使用react-native-storage本地存储 第一步:配置storage主文件 mystorage.js import { AsyncStorage } from 'react-nat ...
- centos6.5 安装scrapy
1. 安装Twisted, 下载安装包 python setup.py install 2. yum install libffi-devel python-devel 3 pip install s ...
- centos xampp 隐藏phpmyadmin地址
/opt/lampp/etc/extra/httpd-xampp.conf Alias /phpmyadmin "/opt/xampp/phpMyAdmin/" 改为 Alias ...
- 运行hadoop的时候提示物理内存或虚拟内存溢出的解决方案running beyond physical memory或者beyond vitual memory limits
当运行中出现Container is running beyond physical memory这个问题出现主要是因为物理内存不足导致的,在执行mapreduce的时候,每个map和reduce都有 ...