一般,我们的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. “胡”说IC——菜鸟工程师完美进阶

    “胡”说IC——菜鸟工程师完美进阶(数十位行业精英故事分享,顶级猎头十多年来经验总结,对将入或初入IC电子业“菜鸟”职业发展.规划的解惑和点拨.) 胡运旺 编著   ISBN 978-7-121-22 ...

  2. java的五种数据类型解析

    不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...

  3. JavaScript开发的技巧

    1. 使用===取代==    ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. "){ //速度慢 } & ...

  4. git查看日志

    git查看日志 git log -n 显示前N条记录 git log -3 退出log命令 直接输入: q git log --stat -n 显示提交的文件的简要的修改统计 $ git log -- ...

  5. emmet插件学习,练习中遇到一些问题

    emmet插件学习:帮助提高敲代码效率的插件 参考文献:Emmet(Zen coding)HTML代码使用技巧七则http://www.wzsky.net/html/Website/htmlcss/1 ...

  6. iReport 下载地址

    iReport 下载地址: https://osdn.jp/projects/sfnet_ireport/releases/# 来自为知笔记(Wiz)

  7. android 键盘遮挡 父布局上滚解决

    private void controlKeyboardLayout(final View root, final View scrollToView) { root.getViewTreeObser ...

  8. NYOJ 1023 还是回文(DP,花最少费用形成回文串)

    /* 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 那么,将字符串变成回文串的最小花费是多少呢? 思路:如果一个字符串增加一个字符 x可以形成一个回文串,那么从这个字 ...

  9. poj2253 Frogger(最短路变型或者最小生成树)

    /* 题意:就是源点到终点有多条的路径,每一条路径中都有一段最大的距离! 求这些路径中最大距离的最小值! Dijkstra, Floyd, spfa都是可以的!只不过是将松弛的条件变一下就行了! 想了 ...

  10. 基于TCPCopy的Dubbo服务引流工具-DubboCopy

    TCPCopy顾名思义,就是一个可以将tcp流量复制的工具(其实也可以复制UDP).有了这样一个工具,我们就可以真实的复制线上流量,然后将这些流量复制到我们的测试服务器上.这样就可以很容易模拟线上真实 ...