struts2关于action拦截器使用方法 现记录如下

struts2关于action拦截器使用方法 现记录如下 以便将来取用

struts2 与springhibernate整合

struts2中拦截action

业务要求:

后台输入

http://localhost:8080/mia/mia-admin/mia-login.jsp 为登入页面

验证用户名和密码 正确则进入后台试图 ,但退出时 ,复制后台某个页面地址, 在浏览器输入回车 ,则转入登入页面

http://localhost:8080/mia/mia-admin/addarticleURL.action

现在使用

Struts2自定义拦截器

所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。该接口提供了三个方法:

1) void init(); 在该拦截器被初始化之后,在该拦截器执行拦截之前,系统回调该方法。对于每个拦截器而言,此方法只执行一次。

2) void destroy();该方法跟init()方法对应。在拦截器实例被销毁之前,系统将回调该方法。

3) String intercept(ActionInvocation invocation) throws Exception; 该方法是用户需要实现的拦截动作。该方法会返回一个字符串作为逻辑视图。

除此之外,继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor是更简单的一种实现拦截器类的方式,因为此类提供了init()和destroy()方法的空实现,这样我们只需要实现intercept方法。

<interceptor …>元素来定义拦截器

<interceptor-ref …>元素来使用拦截器。

使用自定义拦截器来完成用户权限的控制:当浏览者需要请求执行某个操作时,应用需要先检查浏览者是否登录,以及是否有足够的权限来执行该操作。

AuthorityInterceptor.Java copy

  1. package com.mia.util;
  2. import java.util.Map;
  3. import com.opensymphony.xwork2.Action;
  4. import com.opensymphony.xwork2.ActionContext;
  5. import com.opensymphony.xwork2.ActionInvocation;
  6. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  7. @SuppressWarnings("rawtypes")
  8. public class AuthorityInterceptor extends AbstractInterceptor {
  9. private static final long serialVersionUID = 1358600090729208361L;
  10. //拦截Action处理的拦截方法
  11. @Override
  12. public String intercept(ActionInvocation invocation) throws Exception {
  13. // 取得请求相关的ActionContext实例
  14. ActionContext context=invocation.getInvocationContext();
  15. Map session=context.getSession();
  16. //取出名为user的session属性
  17. String user=(String)session.get("username");
  18. //如果没有登陆,或者登陆所有的用户名不是mia,都返回重新登陆
  19. if(user!=null && user.equals("mia")){
  20. System.out.println("合法用户");
  21. return invocation.invoke();
  22. } else {
  23. //没有登陆,将服务器提示设置成一个HttpServletRequest属性
  24. context.put("tip","您还没有登录,请登陆系统");
  25. return Action.LOGIN;
  26. }
  27. }
  28. }

由于我后台是一个用户 所以这里我限定死了 为mia

配置权限控制拦截器

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
 
 <package name="articleURL" extends="struts-default"> 
 
 <interceptors> 
 <!-- 定义权限拦截器 --> 
 <interceptor name="authority" class="com.mia.util.AuthorityInterceptor"></interceptor> 
 
 <!-- 定义一个包含权限权限拦截器 --> 
 <interceptor-stack name="mydefault"> 
 <interceptor-ref name="defaultStack"/> 
 <interceptor-ref name="authority"/> 
 </interceptor-stack> 
 </interceptors> 
 
 <!-- 定义默认拦截器 --> 
 <default-interceptor-ref name="mydefault"/> 
 
 <!-- 定义全局处理结局 --> 
 <global-results> 
 <result name="login">/mia-login.jsp</result> 
 </global-results> 
 
 
 
 
 <action name="addarticleURL" class="AddarticleURL" method="publisharticleURL"> 
 <result name="success" >/mia-admin/public/article/add.jsp</result> 
 
 </action> 
 
 </package> 
 
 
</struts> 

一旦在某个包下定义了默认拦截器栈,在该包下的所有action都会使用此拦截器栈。对于那些不想使用些拦截器栈的action,则应该将它放置在其它的包下。

运行调试

在浏览器地址栏直接输入http://localhost:8080/mia/mia-admin/addarticleURL.action来访问,此动作配置了权限拦截器,所有被转到登录页面

登入后 就会登入到后台了

当然也可以不用配成拦截器栈

<!DOCTYPE struts PUBLIC  
 
       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
 
       "http://struts.apache.org/dtds/struts-2.0.dtd"> 
 
lt;struts> 
 
 <package name="my" extends="struts-default"> 
 
 
 
 <interceptors> 
 
 <!-- 定义权限控制拦截器 --> 
 
 <interceptor name="authority" class=" com.mia.util.AuthorityInterceptor"/> 
 
 </interceptors> 
 
 
 
 <!-- 定义全局处理结果 --> 
 
 <global-results> 
 
 <!-- 逻辑名为login的结果,映射到/login.jsp页面 --> 
 
 <result name="login">/mia-login.jsp</result> 
 
 </global-results> 
 
 
 
 <action name="addarticleURL" class="AddarticleURL" method="publisharticleURL"> 
 <result name="success" >/mia-admin/public/article/add.jsp</result> 
 <!-- 使用拦截器 --> 
 
 <interceptor-ref name="defaultStack"/> 
 
 <interceptor-ref name="authority"/> 
 
 </action> 
 
 
 
 </package> 
 
lt;/struts>

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2016-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小尘哥的专栏

springboot使用properties定义短信模板

通常我们做开发时候会遇到短信发送邮件发送之类的需求,发送内容往往会由客户提供一个模板,如果我们是在程序里拼接字符串来搞定这个模板,很明显是一种坑队友的做法。一般...

1193
来自专栏炸天帮5

win32进程概念之句柄表,以及内核对象.

我们知道.我们使用CreateProcess 的时候会返回一个进程句柄.以及线程句柄. 其实在调用CreateProcess的时候.内核中会新建一个EPROCE...

911
来自专栏晨星先生的自留地

面试中碰到的坑系列之注入(3)

1792
来自专栏数据之美

论 Python 装饰器控制函数 Timeout 的正确姿势

1、问题背景 之前在这篇《Python RPC 远程调用脚本之 RPyC 实践》中实现过一个小 Demo,通过 RPyC 可以实现一个简单的分布式程序,但是,有...

3.3K10
来自专栏Java 源码分析

Struts2笔记(三)

拦截器,struts2方庄了很多功能,这些功能都是使用拦截器来实现的。一般的拦截器只是执行默认的拦截器,就是在struts-core这个包里面,然后李 main...

3379
来自专栏Java帮帮-微信公众号-技术文章全总结

Java开发必会框架Struts2第一天

一、框架概述 1、框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。 特点:封装了很多...

3678
来自专栏Python研发

Django之Cookie

在浏览器端(客户端)保存的键值对,特性:每次http请求都会携带.           举个例子:{"name":身份证号}

2333
来自专栏抠抠空间

爬虫之ssh证书警告错误

2570
来自专栏漫漫全栈路

ubuntu搭建内网穿透服务Ngrok

说些闲话: 最近一直在乱折腾,看看C,看看Python,又打算去看一下PHP,然后又是前端的Vue.Js,最后发现——嗯?我都在干些什么? 当然不论是在做什么...

1.1K6
来自专栏大内老A

[WCF权限控制]WCF的三种授权模式

前面的两篇文章(《从两个重要的概念谈起:Identity与Principal[上篇]》和《从两个重要的概念谈起:Identity与Principal[下篇]》)...

2076

扫码关注云+社区

领取腾讯云代金券