此系列博文基于同一个项目已上传至github  传送门

  JavaWeb_(Struts2框架)Struts创建Action的三种方式  传送门

  JavaWeb_(Struts2框架)struts.xml核心配置、动态方法调用、结果集的处理  传送门

  JavaWeb_(Struts2框架)Log4j的配置以及解决中文乱码  传送门

  JavaWeb_(Struts2框架)参数传递之接收参数与传递参数  传送门

  JavaWeb_(Struts2框架)Ognl小案例查询帖子  传送门

  JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型  传送门

  JavaWeb_(Struts2框架)拦截器interceptor  传送门

创建拦截器的两种方式

  第一种:继承MethodFilterInterceptor父类【推荐】

  1. package com.Gary.web.intercept;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
  5.  
  6. //第一种创建拦截器的方式
  7. public class MyIntercept extends MethodFilterInterceptor{
  8.  
  9. @Override
  10. protected String doIntercept(ActionInvocation invocation) throws Exception {
  11.  
  12. //放行
  13. return invocation.invoke();
  14. }
  15.  
  16. }

MyIntercept.java

  

  第二种:实现Interceptor接口

  1. package com.Gary.web.intercept;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.Interceptor;
  5.  
  6. //第二种创建拦截器的方法
  7. public class Intercept implements Interceptor{
  8.  
  9. @Override
  10. public void destroy() {
  11. // TODO Auto-generated method stub
  12.  
  13. }
  14.  
  15. @Override
  16. public void init() {
  17. // TODO Auto-generated method stub
  18.  
  19. }
  20.  
  21. @Override
  22. public String intercept(ActionInvocation invocation) throws Exception {
  23. // TODO Auto-generated method stub
  24. //放行
  25. return invocation.invoke();
  26. }
  27.  
  28. }

Intercept.java

  在struts.xml中配置拦截器

  1.     <interceptors>
  2. <!-- 注册拦截器 -->
  3. <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
  4. <!-- 注册拦截器栈 -->
  5. <interceptor-stack name="myStack">
  6. <!-- 引入自己创建的拦截器 -->
  7. <interceptor-ref name="myIntercept"></interceptor-ref>
  8. <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
  9. <interceptor-ref name="defaultStack"></interceptor-ref>
  10. </interceptor-stack>
  11. </interceptors>
  12.  
  13. <!-- 指定包中的默认拦截器栈 -->
  14. <default-interceptor-ref name="myStack"></default-interceptor-ref>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  4. "http://struts.apache.org/dtds/struts-2.5.dtd">
  5.  
  6. <struts>
  7.  
  8. <constant name="struts.devMode" value="true"></constant>
  9. <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
  10.  
  11. <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
  12. <package name="MyPackage" namespace="/" extends="struts-default">
  13.  
  14. <interceptors>
  15. <!-- 注册拦截器 -->
  16. <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
  17. <!-- 注册拦截器栈 -->
  18. <interceptor-stack name="myStack">
  19. <!-- 引入自己创建的拦截器 -->
  20. <interceptor-ref name="myIntercept"></interceptor-ref>
  21. <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
  22. <interceptor-ref name="defaultStack"></interceptor-ref>
  23. </interceptor-stack>
  24. </interceptors>
  25.  
  26. <!-- 指定包中的默认拦截器栈 -->
  27. <default-interceptor-ref name="myStack"></default-interceptor-ref>
  28.  
  29. <!-- 增加动态方法调用的安全性 -->
  30. <global-allowed-methods>regex:.*</global-allowed-methods>
  31.  
  32. <!-- action:配置action类
  33. name:决定了action访问的资源名称 servlet:url-pattern
  34. class:action的完整类名
  35. method:指定调用action中的哪个方法来去处理请求 -->
  36.  
  37. <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
  38. <!-- 默认为转发 redirect设置为重定向 -->
  39. <result name="success" type="redirect">/index.html</result>
  40. <!-- 默认为转发 -->
  41. <result name="error">/login.jsp</result>
  42. </action>
  43.  
  44. <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
  45.  
  46. </action>
  47.  
  48. <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
  49. <!-- 转发到LoginActionDefault -->
  50. <result name="defaultAction" type="chain">LoginActionDefault</result>
  51.  
  52. <!-- 重定向到Action(LoginAction_*) -->
  53. <result name="toLogin" type="redirectAction">
  54. <param name="actionName">LoginAction_login</param>
  55.  
  56. <param name="username">${username}</param>
  57. <param name="password">${password}</param>
  58. </result>
  59.  
  60. </action>
  61. </package>
  62.  
  63. <package name="PastePackage" namespace="/" extends="struts-default">
  64. <global-allowed-methods>regex:.*</global-allowed-methods>
  65. <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
  66. <result name="index">/index.jsp</result>
  67. </action>
  68.  
  69. </package>
  70.  
  71. </struts>

struts.xml

  配置拦截器(拦截器只能控制访问Action,不能控制访问jsp)

  在UserAction.java中当用户登陆成功时,放置user到ActionContext域中

  1. boolean success = userService.findUser(user);
  2.  
  3. if(success)
  4. {
  5. ActionContext.getContext().getSession().put("user", user);
  6. return "success";
  7. }else{
  8. ServletActionContext.getRequest().setAttribute("error", "用户名或密码错误!!!");
  9. return "error";
  10. }

  实现MyIntercept.java拦截器

  1. protected String doIntercept(ActionInvocation invocation) throws Exception {
  2.  
  3. System.out.println("MyIntercept");
  4.  
  5. //获取session
  6. Map<String, Object> session = ActionContext.getContext().getSession();
  7. //获取session中的user
  8. Object object = session.get("user");
  9. //判断session中是否有数据
  10. if(object!=null)
  11. {
  12. //有,放行
  13. return invocation.invoke();
  14. }
  15. else
  16. {
  17. //没有,重定向到login.jsp
  18. return "toLogin";
  19. }
  20.  
  21. }

  局部拦截器

  1. <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
  2. <result name="tologin" type="redirect">/login.jsp</result>
  3. </action>

  全局拦截器:如果每一个action都要单独配置一个局部兰机器,就会显得很麻烦,这时就可以使用<global-results>标签配置全局拦截器

  1. <default-interceptor-ref name="myStack"></default-interceptor-ref>
  2. <global-results>
  3. <result name="toLogin" type="redirect">/login.jsp</result>
  4. </global-results>

  配置放行登陆方法login的拦截器

  1. <interceptors>
  2. <!-- 注册拦截器 -->
  3. <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
  4. <!-- 注册拦截器栈 -->
  5. <interceptor-stack name="myStack">
  6. <!-- 引入自己创建的拦截器 -->
  7. <interceptor-ref name="myIntercept">
  8. <param name="excludeMethods">login</param>
  9. </interceptor-ref>
  10. <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
  11. <interceptor-ref name="defaultStack"></interceptor-ref>
  12. </interceptor-stack>
  13. </interceptors>

  此时,当用户未登录时,拦截器会拦截LoginActionDefault请求,并重定向到login.jsp中。当用户登陆后,会放行LoginActionDefault请求,并在控制台输出通过System.err.println("这是一个普通的action");输出红色的【这是一个普通的action】

  

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8" />
  7. <link rel="stylesheet" type="text/css" href="css/index.css">
  8. </head>
  9. <div class="dvhead">
  10. <div class="dvlogo">
  11. <a href="index.html">你问我答</a>
  12. </div>
  13. <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
  14. <div class="dvreg">
  15. 已有账号,立即&nbsp;<a href="login.html">登录</a>
  16. </div>
  17. </div>
  18. <div class="dvContent">
  19. <div class="dvquesleft">
  20.  
  21. <div class="dvqstitle">
  22. <image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
  23. </div>
  24. <div class="dvtabhead">
  25. <div class="tabheads tabcurrent">全部问题</div>
  26. <div class="tabheads">我的问题</div>
  27. <div class="tabheads">关注问题</div>
  28. <div class="tabheads">问题标签</div>
  29. </div>
  30. <div class="tabContent">
  31. <div class="dvtags">
  32. <a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
  33. </div>
  34. <div class="tab">
  35. <s:iterator value="pasteList" var="paste">
  36. <div class="dvques">
  37. <div class="quesCount">
  38. <div class="count"><s:property value="id"/></div>
  39. <div class="ques">回答数</div>
  40. </div>
  41. <div class="quesContent">
  42. <div class="quesTitle">
  43. <s:property value="offer"/>
  44. <image src="data:images/bean.jpg" class="bean"> <span
  45. class="spanques"><s:property value="title"/></span>
  46. </div>
  47. <div class="qContent"><s:property value="content"/></div>
  48. <div class="tags">
  49. <span class="tag">excel</span><span class="tag">程序</span>
  50. </div>
  51. <div class="quesUser">
  52. <image src="data:images/0.gif" class="imguser" />
  53. <div class="userName">
  54. <s:property value="#user.username"/>
  55. <div class="liulan">浏览(9) 30分钟前</div>
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. </s:iterator>
  61.  
  62. </div>
  63. <div class="tab hidden">2</div>
  64. <div class="tab hidden">3</div>
  65. <div class="tab hidden">4</div>
  66. </div>
  67. </div>
  68. <div class="dvquesright">
  69. <div>
  70. <buton class="btnques" onclick="location.href='add.html'">提个问题</buton>
  71. </div>
  72. <div class="dvorder">
  73. <div class="orderTitle">专家排行榜</div>
  74. <div class="users">
  75. <image class="userface" src="data:images/0.gif" />
  76. <div class="dvuser">
  77. <div class="userTitle">陈有龙</div>
  78. <div class="userdeital">大牛6级 豆:14006</div>
  79. </div>
  80. </div>
  81. <div class="users">
  82. <image class="userface" src="data:images/1.gif" />
  83. <div class="dvuser">
  84. <div class="userTitle">陈有龙</div>
  85. <div class="userdeital">大牛6级 豆:14006</div>
  86. </div>
  87. </div>
  88. <div class="users">
  89. <image class="userface" src="data:images/2.gif" />
  90. <div class="dvuser">
  91. <div class="userTitle">陈有龙</div>
  92. <div class="userdeital">大牛6级 豆:14006</div>
  93. </div>
  94. </div>
  95. <div class="users">
  96. <image class="userface" src="data:images/3.gif" />
  97. <div class="dvuser">
  98. <div class="userTitle">陈有龙</div>
  99. <div class="userdeital">大牛6级 豆:14006</div>
  100. </div>
  101. </div>
  102. <div class="users">
  103. <image class="userface" src="data:images/4.gif" />
  104. <div class="dvuser">
  105. <div class="userTitle">陈有龙</div>
  106. <div class="userdeital">大牛6级 豆:14006</div>
  107. </div>
  108. </div>
  109. <div class="users">
  110. <image class="userface" src="data:images/5.gif" />
  111. <div class="dvuser">
  112. <div class="userTitle">陈有龙</div>
  113. <div class="userdeital">大牛6级 豆:14006</div>
  114. </div>
  115. </div>
  116. <div class="users">
  117. <image class="userface" src="data:images/6.gif" />
  118. <div class="dvuser">
  119. <div class="userTitle">陈有龙</div>
  120. <div class="userdeital">大牛6级 豆:14006</div>
  121. </div>
  122. </div>
  123.  
  124. </div>
  125.  
  126. </div>
  127.  
  128. </div>
  129. <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
  130. <script type="text/javascript">
  131. $(function()
  132. {
  133.  
  134. $(".tabheads").click(function()
  135. {
  136. $(".tabheads").removeClass("tabcurrent").eq($(this).index()).addClass("tabcurrent");
  137. $(".tab").hide().eq($(this).index()).show();
  138. });
  139. });
  140. </script>
  141. <body>
  142. </body>
  143. </html>

index.jsp

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  4. "http://struts.apache.org/dtds/struts-2.5.dtd">
  5.  
  6. <struts>
  7.  
  8. <constant name="struts.devMode" value="true"></constant>
  9. <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
  10.  
  11. <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
  12. <package name="MyPackage" namespace="/" extends="struts-default">
  13.  
  14. <interceptors>
  15. <!-- 注册拦截器 -->
  16. <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
  17. <!-- 注册拦截器栈 -->
  18. <interceptor-stack name="myStack">
  19. <!-- 引入自己创建的拦截器 -->
  20. <interceptor-ref name="myIntercept">
  21. <param name="excludeMethods">login</param>
  22. </interceptor-ref>
  23. <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
  24. <interceptor-ref name="defaultStack"></interceptor-ref>
  25. </interceptor-stack>
  26. </interceptors>
  27.  
  28. <!-- 指定包中的默认拦截器栈 -->
  29. <default-interceptor-ref name="myStack"></default-interceptor-ref>
  30. <global-results>
  31. <result name="toLogin" type="redirect">/login.jsp</result>
  32. </global-results>
  33.  
  34. <!-- 增加动态方法调用的安全性 -->
  35. <global-allowed-methods>regex:.*</global-allowed-methods>
  36.  
  37. <!-- action:配置action类
  38. name:决定了action访问的资源名称 servlet:url-pattern
  39. class:action的完整类名
  40. method:指定调用action中的哪个方法来去处理请求 -->
  41.  
  42. <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
  43. <!-- 默认为转发 redirect设置为重定向 -->
  44. <result name="success" type="redirect">/index.html</result>
  45. <!-- 默认为转发 -->
  46. <result name="error">/login.jsp</result>
  47. </action>
  48.  
  49. <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
  50.  
  51. </action>
  52.  
  53. <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
  54. <!-- 转发到LoginActionDefault -->
  55. <result name="defaultAction" type="chain">LoginActionDefault</result>
  56.  
  57. <!-- 重定向到Action(LoginAction_*) -->
  58. <result name="toLogin" type="redirectAction">
  59. <param name="actionName">LoginAction_login</param>
  60.  
  61. <param name="username">${username}</param>
  62. <param name="password">${password}</param>
  63. </result>
  64.  
  65. </action>
  66. </package>
  67.  
  68. <package name="PastePackage" namespace="/" extends="struts-default">
  69. <global-allowed-methods>regex:.*</global-allowed-methods>
  70. <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
  71. <result name="index">/index.jsp</result>
  72. </action>
  73.  
  74. </package>
  75.  
  76. </struts>

struts.xml

  1. package com.Gary.web.intercept;
  2.  
  3. import java.util.Map;
  4.  
  5. import com.opensymphony.xwork2.ActionContext;
  6. import com.opensymphony.xwork2.ActionInvocation;
  7. import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
  8.  
  9. //第一种创建拦截器的方式
  10. public class MyIntercept extends MethodFilterInterceptor{
  11.  
  12. @Override
  13. protected String doIntercept(ActionInvocation invocation) throws Exception {
  14.  
  15. System.out.println("MyIntercept");
  16.  
  17. //获取session
  18. Map<String, Object> session = ActionContext.getContext().getSession();
  19. //获取session中的user
  20. Object object = session.get("user");
  21. //判断session中是否有数据
  22. if(object!=null)
  23. {
  24. //有,放行
  25. return invocation.invoke();
  26. }
  27. else
  28. {
  29. //没有,重定向到login.jsp
  30. return "toLogin";
  31. }
  32.  
  33. }
  34.  
  35. }

MyIntercept.java

JavaWeb_(Struts2框架)拦截器interceptor的更多相关文章

  1. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  2. Struts2框架拦截器:

    Struts 2框架提供了良好的预配置,并准备使用的盒拦截.下面列出了几个重要的拦截器: SN Interceptor & 描述 1 aliasAllows parameters to hav ...

  3. Struts2 利用拦截器 interceptor 控制登陆和访问权限

    最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...

  4. struts2的拦截器(Interceptor)与过滤器(Filter)

    一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...

  5. JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  6. JavaWeb_(Struts2框架)Ognl小案例查询帖子

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  7. JavaWeb_(Struts2框架)参数传递之接收参数与传递参数

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  8. JavaWeb_(Struts2框架)Log4j的配置以及解决中文乱码

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  9. JavaWeb_(Struts2框架)struts.xml核心配置、动态方法调用、结果集的处理

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

随机推荐

  1. CF516D Drazil and Morning Exercise

    cf luogu 首先每个点到最远点的距离可以预处理出来,这个距离显然是这个点到树直径两端点的最大值.把那个距离记为\(d_i\),然后从小到大枚举\(d_i\),并强制它为最大的\(d_i\),那么 ...

  2. python:常用模块 知识整理

    time模块 time.time() # 时间戳:1487130156.419527 time.strftime("%Y-%m-%d %X") #格式化的时间字符串:'2017-0 ...

  3. (转)从斐波那契数列看Java方法的调用过程

    斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列安纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔 ...

  4. makefile学习之函数

    GNU make支持内置函数以及用户自定义函数,下面结合例子简单介绍一下. gnu make版本: 4.1 一.用户自定义函数 格式: $(call macro-name{, param1 ···}) ...

  5. TP-LINK WR941N路由器研究

    TP-LINK WR941N路由器研究 之前看到了一个CVE, CVE-2017-13772 是TP-Link WR940N后台的RCE, 手头上正好有一个TP-Link WR941N的设备,发现也存 ...

  6. OSG入坑之路[转]

    转载自:https://segmentfault.com/a/1190000010506374?utm_source=tag-newest osg插件原理:https://blog.csdn.net/ ...

  7. Go语言基础之操作MySQL

    Go语言操作MySQL MySQL是常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据库的 ...

  8. windows下用navicat链接虚拟机MySQL数据库的过程和问题解决

    navicat远程连接虚拟机中的MySQL数据库 1.在linux查看mysql服务器IP地址 ifconfig 记住此IP navicat设置 设置完毕 遇到问题 一直连不上,在网上搜索了一下,主要 ...

  9. java-Freemarker-模板引擎学习

    博客:Java模板引擎性能对比  Thymeleaf性能偏低. 博客:Java模板引擎 FreeMarker   综合性的介绍,内容有点粗糙. 博客:JavaEE进阶——FreeMarker模板引擎 ...

  10. 11.tensorboard网络结构

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 载入数据集 mnist = i ...