一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项。对于个别页面来说,可能不需要进行拦截,此时,如果项目采用struts view框架来做的话,我们可以用strut的拦截器做一个intercepter类。

首先在项目中独立一个包出来

  我们写一个拦截器类,让它继承 MethodFilterInterceptor。

 /**
* 登陆拦截器
* @author Administrator
*
*/
public class LoginIntercepter extends MethodFilterInterceptor{ @Override
protected String doIntercept(ActionInvocation invoke) throws Exception {
Map session = invoke.getInvocationContext().getSession(); //從上下文中獲取session會話,結果為MAP集合,裏面是以json格式保存的相關信息
Object user = session.get("user"); //獲取session會話中的會員名稱
if(user != null){
return invoke.invoke(); //對該操作不攔截
}else{
invoke.getInvocationContext().put("tip","您还没有登录,请登陆系统");
return "loginUI"; //返回登陸界面
}
} }

加入配置文件interceoper-struts.xml ,其中 name="intercepter" 作为独立的一个全局的package 其他的配置文件只需加入extends="intercepter"即可。尤其

      <param name="excludeMethods">xx,xxx</param> 这一代码是过滤的方法 ,即不进行拦截的方法。把对应的方法名放入即可,中间用逗号分隔。
      <param name="includeMethods">xx,xxx</param> 这行代码意思,进行拦截的方法,把对应的方法名放入即可,中间用逗号分隔。
 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="intercepter" extends="struts-default">
<interceptors>
<!-- 配置未登录进行操作的拦截器 -->
<interceptor name="loginInterceptor" class="com.chinawaf.intercepter.action.LoginIntercepter" />
<!-- 重新封装一个默认的拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor" >
<!-- 设置方法名 ,对应的方法不做拦截 -->
<param name="excludeMethods">login,getVerriCode</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 为这个包设置默认的拦截器栈 -->
<default-interceptor-ref name="myStack" /> <global-results>
24 <result name="loginUI">/WEB-INF/jsp/afterend/login.jsp</result>
25 </global-results> </package> </struts>

然后在struts.xml中进行导入:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 禁用动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!-- 配置成开发模式 -->
<constant name="struts.devMode" value="false" />
<!-- 配置拓展名为action -->
<constant name="struts.action.extention" value="action"/>
<!-- 把主题配置成simple -->
<constant name="struts.ui.theme" value="simple" /> <include file="com/chinawaf/intercepter/config/intercepter-struts.xml"></include>
<include file="com/chinawaf/backLogin/conf/backLogin-struts.xml"></include>
<include file="com/chinawaf/home/conf/home-struts.xml"></include>
<include file="com/chinawaf/rtmp/log/conf/rtmpLog-struts.xml"></include>
<include file="com/chinawaf/rtmp/video/conf/rtmpVideo-struts.xml"></include>
<include file="com/chinawaf/rtmp/pvw/conf/rtmpPvw-struts.xml"></include>
<include file="com/chinawaf/rtmp/waf/conf/rtmpWaf-struts.xml"></include>
<include file="com/chinawaf/login/conf/login-struts.xml"></include>
<include file="com/chinawaf/backstage/user/conf/user-struts.xml"></include>
<include file="com/chinawaf/backstage/servicePage/conf/serve-struts.xml"></include>
<include file="com/chinawaf/rtmp/video/conf/rtmpVideo-struts.xml"></include>
<include file="com/chinawaf/backstage/api/conf/api-struts.xml"></include>
<include file="com/chinawaf/rtmp/monitoring/conf/rtmpMonitoring-struts.xml"></include>
<include file="com/chinawaf/cdn/cdn/conf/cdnCdn-struts.xml"></include>
<include file="com/chinawaf/cdn/list/conf/cdnList-struts.xml"></include>
<include file="com/chinawaf/cdn/cache/conf/cdnCache-struts.xml"></include>
<include file="com/chinawaf/cdn/flow/conf/cdnFlow-struts.xml"></include>
<include file="com/chinawaf/cdn/manage/conf/cdnManage-struts.xml"></include>
<include file="com/chinawaf/cdn/waf/conf/cdnWaf-struts.xml"></include>
<include file="com/chinawaf/cdn/visit/conf/cdnVisit-struts.xml"></include>
<include file="com/chinawaf/cdn/visitor/conf/cdnVisitor-struts.xml"></include>
</struts>

其他的配置文件进行继承,例如登录的xml:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="sysLoginAction" namespace="/" extends="intercepter">
<action name="randPic" class="com.chinawaf.login.action.RandomAction" method="getVerriCode">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action> <action name="login_*" class="com.chinawaf.login.action.LoginAction" method="{1}">
<result name="loginUI">/WEB-INF/jsp/client/login.jsp</result>
<result name="home" type="redirectAction">
<param name="actionName">home</param>
</result>
</action>
</package> </struts>

最后,struts 还可有其他的拦截器类,如:AbstractInterceptor  ,可以继承此类进行url地址的拦截。

关于 struts2 拦截器的详细介绍,可以参考这篇文章:http://wenku.baidu.com/link?url=GPQkMm2UkyFeRPMWH7RMTqJD1xVV2DWU90b5FwuNzDQjuAnx300jMePNb1IVgxMkM3dek3Irixm-kuTOmClbSQ8vdyEjRPwmAdXqZOlG_GK

struts 用拦截器进行用户权限隔离,未登录用户跳到登录界面 *** 最爱那水货的更多相关文章

  1. jsp+js完成用户一定时间未操作就跳到登录页面

    <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" ...

  2. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  3. 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】

    一.使用反射动态添加权限 在该系统中,我使用struts2的时候非常规范,访问的Action的形式都是"ActionClassName_MethodName.action?参数列表" ...

  4. Struts 2 拦截器

    什么是Struts 2 拦截器  拦截器就是当用户请求后台Action类时在Action的Excute()方法执行前和Result返回魔板试图之后(将页面(数据)发送给浏览器渲染之前)所需要的一些通用 ...

  5. linux普通用户权限设置为超级用户权限方法、sudo不用登陆密码

    以用户zato为例 普通用户权限设置为超级用户权限 进入有超级用户权限的账号 添加文件可写(w)权限 sudo chmod u+x /etc/sudoers 编辑/etc/sudoers文件 添加语句 ...

  6. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

  7. struts自定义拦截器

    第01步:配置web.xml,启动struts框架 <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  8. Struts2 自定义拦截器实例—登陆权限验证

    实现一个登陆权限验证的功能 message.jsp: <body> message:${message } </body> login.jsp: <% request.g ...

  9. Struts自定义拦截器&拦截器工作原理

    0.拦截器的调用原理: 拦截器是一个继承了序列化接口的普通接口.其工作原理是讲需要被拦截的对象作为参数传到intercept()方法内,在方法内部对此对象进行处理之后再执行原方法.intercept( ...

随机推荐

  1. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  2. 更新日志 - BugHD 新增邮件告警功能

    最近 BugHD 又新增了一些功能,包括邮件告警. issue 分享. issue 备注等,同时也做了性能优化.希望能够帮助你更高效地收集解决应用崩溃. BugHD 新增功能 1.邮件告警 除了 We ...

  3. JVM快速学习

    最近开始了全面的JAVA生态环境学习,因此,JVM的学习是必不可少的一个环节.和.NET的CLR一样,一起的JAVA应用均跑在JVM虚拟机上,不过相对我们只能干看看的CLR,JVM有很大的灵活性,可以 ...

  4. C++标准库vector类型详解

    Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...

  5. DOM对象模型四大基本接口

    本文向大家描述一下DOM对象模型的四个基本接口,在DOM对象模型接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap. 在DOM对象模型接口规范中,有 ...

  6. 深入理解PHP内核(十)变量及数据类型-类型提示的实现

    原文链接:http://www.orlion.ga/253/ PHP是弱类型语言,向方法传递参数时也并不严格检查数据类型.不过有时候需要判断传递到方法中的参数,为此PHP中提供了一些函数来判断数据的类 ...

  7. 拓扑排序(二)之 C++详解

    本章是通过C++实现拓扑排序. 目录 1. 拓扑排序介绍 2. 拓扑排序的算法图解 3. 拓扑排序的代码说明 4. 拓扑排序的完整源码和测试程序 转载请注明出处:http://www.cnblogs. ...

  8. 原生JS编写的照片墙效果实例演示特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. GDB 和 windbg 命令对照(转载)

    From:http://blog.csdn.net/joeleechj/article/details/10020501 命令                                      ...

  10. 【转】FastCgi与PHP-fpm关系

    刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...