JavaWeb_(Struts2框架)拦截器interceptor
此系列博文基于同一个项目已上传至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父类【推荐】
- package com.Gary.web.intercept;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
- //第一种创建拦截器的方式
- public class MyIntercept extends MethodFilterInterceptor{
- @Override
- protected String doIntercept(ActionInvocation invocation) throws Exception {
- //放行
- return invocation.invoke();
- }
- }
MyIntercept.java
第二种:实现Interceptor接口
- package com.Gary.web.intercept;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.Interceptor;
- //第二种创建拦截器的方法
- public class Intercept implements Interceptor{
- @Override
- public void destroy() {
- // TODO Auto-generated method stub
- }
- @Override
- public void init() {
- // TODO Auto-generated method stub
- }
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- // TODO Auto-generated method stub
- //放行
- return invocation.invoke();
- }
- }
Intercept.java
在struts.xml中配置拦截器
- <interceptors>
- <!-- 注册拦截器 -->
- <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
- <!-- 注册拦截器栈 -->
- <interceptor-stack name="myStack">
- <!-- 引入自己创建的拦截器 -->
- <interceptor-ref name="myIntercept"></interceptor-ref>
- <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 指定包中的默认拦截器栈 -->
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
- "http://struts.apache.org/dtds/struts-2.5.dtd">
- <struts>
- <constant name="struts.devMode" value="true"></constant>
- <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
- <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
- <package name="MyPackage" namespace="/" extends="struts-default">
- <interceptors>
- <!-- 注册拦截器 -->
- <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
- <!-- 注册拦截器栈 -->
- <interceptor-stack name="myStack">
- <!-- 引入自己创建的拦截器 -->
- <interceptor-ref name="myIntercept"></interceptor-ref>
- <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 指定包中的默认拦截器栈 -->
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- <!-- 增加动态方法调用的安全性 -->
- <global-allowed-methods>regex:.*</global-allowed-methods>
- <!-- action:配置action类
- name:决定了action访问的资源名称 servlet:url-pattern
- class:action的完整类名
- method:指定调用action中的哪个方法来去处理请求 -->
- <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
- <!-- 默认为转发 redirect设置为重定向 -->
- <result name="success" type="redirect">/index.html</result>
- <!-- 默认为转发 -->
- <result name="error">/login.jsp</result>
- </action>
- <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
- </action>
- <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
- <!-- 转发到LoginActionDefault -->
- <result name="defaultAction" type="chain">LoginActionDefault</result>
- <!-- 重定向到Action(LoginAction_*) -->
- <result name="toLogin" type="redirectAction">
- <param name="actionName">LoginAction_login</param>
- <param name="username">${username}</param>
- <param name="password">${password}</param>
- </result>
- </action>
- </package>
- <package name="PastePackage" namespace="/" extends="struts-default">
- <global-allowed-methods>regex:.*</global-allowed-methods>
- <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
- <result name="index">/index.jsp</result>
- </action>
- </package>
- </struts>
struts.xml
配置拦截器(拦截器只能控制访问Action,不能控制访问jsp)
在UserAction.java中当用户登陆成功时,放置user到ActionContext域中
- boolean success = userService.findUser(user);
- if(success)
- {
- ActionContext.getContext().getSession().put("user", user);
- return "success";
- }else{
- ServletActionContext.getRequest().setAttribute("error", "用户名或密码错误!!!");
- return "error";
- }
实现MyIntercept.java拦截器
- protected String doIntercept(ActionInvocation invocation) throws Exception {
- System.out.println("MyIntercept");
- //获取session
- Map<String, Object> session = ActionContext.getContext().getSession();
- //获取session中的user
- Object object = session.get("user");
- //判断session中是否有数据
- if(object!=null)
- {
- //有,放行
- return invocation.invoke();
- }
- else
- {
- //没有,重定向到login.jsp
- return "toLogin";
- }
- }
局部拦截器
- <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
- <result name="tologin" type="redirect">/login.jsp</result>
- </action>
全局拦截器:如果每一个action都要单独配置一个局部兰机器,就会显得很麻烦,这时就可以使用<global-results>标签配置全局拦截器
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- <global-results>
- <result name="toLogin" type="redirect">/login.jsp</result>
- </global-results>
配置放行登陆方法login的拦截器
- <interceptors>
- <!-- 注册拦截器 -->
- <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
- <!-- 注册拦截器栈 -->
- <interceptor-stack name="myStack">
- <!-- 引入自己创建的拦截器 -->
- <interceptor-ref name="myIntercept">
- <param name="excludeMethods">login</param>
- </interceptor-ref>
- <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
此时,当用户未登录时,拦截器会拦截LoginActionDefault请求,并重定向到login.jsp中。当用户登陆后,会放行LoginActionDefault请求,并在控制台输出通过System.err.println("这是一个普通的action");输出红色的【这是一个普通的action】
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@taglib uri="/struts-tags" prefix="s"%>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <link rel="stylesheet" type="text/css" href="css/index.css">
- </head>
- <div class="dvhead">
- <div class="dvlogo">
- <a href="index.html">你问我答</a>
- </div>
- <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
- <div class="dvreg">
- 已有账号,立即 <a href="login.html">登录</a>
- </div>
- </div>
- <div class="dvContent">
- <div class="dvquesleft">
- <div class="dvqstitle">
- <image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
- </div>
- <div class="dvtabhead">
- <div class="tabheads tabcurrent">全部问题</div>
- <div class="tabheads">我的问题</div>
- <div class="tabheads">关注问题</div>
- <div class="tabheads">问题标签</div>
- </div>
- <div class="tabContent">
- <div class="dvtags">
- <a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
- </div>
- <div class="tab">
- <s:iterator value="pasteList" var="paste">
- <div class="dvques">
- <div class="quesCount">
- <div class="count"><s:property value="id"/></div>
- <div class="ques">回答数</div>
- </div>
- <div class="quesContent">
- <div class="quesTitle">
- <s:property value="offer"/>
- <image src="data:images/bean.jpg" class="bean"> <span
- class="spanques"><s:property value="title"/></span>
- </div>
- <div class="qContent"><s:property value="content"/></div>
- <div class="tags">
- <span class="tag">excel</span><span class="tag">程序</span>
- </div>
- <div class="quesUser">
- <image src="data:images/0.gif" class="imguser" />
- <div class="userName">
- <s:property value="#user.username"/>
- <div class="liulan">浏览(9) 30分钟前</div>
- </div>
- </div>
- </div>
- </div>
- </s:iterator>
- </div>
- <div class="tab hidden">2</div>
- <div class="tab hidden">3</div>
- <div class="tab hidden">4</div>
- </div>
- </div>
- <div class="dvquesright">
- <div>
- <buton class="btnques" onclick="location.href='add.html'">提个问题</buton>
- </div>
- <div class="dvorder">
- <div class="orderTitle">专家排行榜</div>
- <div class="users">
- <image class="userface" src="data:images/0.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/1.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/2.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/3.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/4.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/5.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- <div class="users">
- <image class="userface" src="data:images/6.gif" />
- <div class="dvuser">
- <div class="userTitle">陈有龙</div>
- <div class="userdeital">大牛6级 豆:14006</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
- <script type="text/javascript">
- $(function()
- {
- $(".tabheads").click(function()
- {
- $(".tabheads").removeClass("tabcurrent").eq($(this).index()).addClass("tabcurrent");
- $(".tab").hide().eq($(this).index()).show();
- });
- });
- </script>
- <body>
- </body>
- </html>
index.jsp
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
- "http://struts.apache.org/dtds/struts-2.5.dtd">
- <struts>
- <constant name="struts.devMode" value="true"></constant>
- <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
- <!-- name:配置包名 namespace:给action的访问路径定义一个命名空间 -->
- <package name="MyPackage" namespace="/" extends="struts-default">
- <interceptors>
- <!-- 注册拦截器 -->
- <interceptor name="myIntercept" class="com.Gary.web.intercept.MyIntercept"></interceptor>
- <!-- 注册拦截器栈 -->
- <interceptor-stack name="myStack">
- <!-- 引入自己创建的拦截器 -->
- <interceptor-ref name="myIntercept">
- <param name="excludeMethods">login</param>
- </interceptor-ref>
- <!-- 引入strtus给你写好的拦截器(20个拦截器) -->
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!-- 指定包中的默认拦截器栈 -->
- <default-interceptor-ref name="myStack"></default-interceptor-ref>
- <global-results>
- <result name="toLogin" type="redirect">/login.jsp</result>
- </global-results>
- <!-- 增加动态方法调用的安全性 -->
- <global-allowed-methods>regex:.*</global-allowed-methods>
- <!-- action:配置action类
- name:决定了action访问的资源名称 servlet:url-pattern
- class:action的完整类名
- method:指定调用action中的哪个方法来去处理请求 -->
- <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
- <!-- 默认为转发 redirect设置为重定向 -->
- <result name="success" type="redirect">/index.html</result>
- <!-- 默认为转发 -->
- <result name="error">/login.jsp</result>
- </action>
- <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
- </action>
- <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
- <!-- 转发到LoginActionDefault -->
- <result name="defaultAction" type="chain">LoginActionDefault</result>
- <!-- 重定向到Action(LoginAction_*) -->
- <result name="toLogin" type="redirectAction">
- <param name="actionName">LoginAction_login</param>
- <param name="username">${username}</param>
- <param name="password">${password}</param>
- </result>
- </action>
- </package>
- <package name="PastePackage" namespace="/" extends="struts-default">
- <global-allowed-methods>regex:.*</global-allowed-methods>
- <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
- <result name="index">/index.jsp</result>
- </action>
- </package>
- </struts>
struts.xml
- package com.Gary.web.intercept;
- import java.util.Map;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
- //第一种创建拦截器的方式
- public class MyIntercept extends MethodFilterInterceptor{
- @Override
- protected String doIntercept(ActionInvocation invocation) throws Exception {
- System.out.println("MyIntercept");
- //获取session
- Map<String, Object> session = ActionContext.getContext().getSession();
- //获取session中的user
- Object object = session.get("user");
- //判断session中是否有数据
- if(object!=null)
- {
- //有,放行
- return invocation.invoke();
- }
- else
- {
- //没有,重定向到login.jsp
- return "toLogin";
- }
- }
- }
MyIntercept.java
JavaWeb_(Struts2框架)拦截器interceptor的更多相关文章
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2框架拦截器:
Struts 2框架提供了良好的预配置,并准备使用的盒拦截.下面列出了几个重要的拦截器: SN Interceptor & 描述 1 aliasAllows parameters to hav ...
- Struts2 利用拦截器 interceptor 控制登陆和访问权限
最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...
- struts2的拦截器(Interceptor)与过滤器(Filter)
一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)Ognl小案例查询帖子
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)参数传递之接收参数与传递参数
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)Log4j的配置以及解决中文乱码
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)struts.xml核心配置、动态方法调用、结果集的处理
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
随机推荐
- CF516D Drazil and Morning Exercise
cf luogu 首先每个点到最远点的距离可以预处理出来,这个距离显然是这个点到树直径两端点的最大值.把那个距离记为\(d_i\),然后从小到大枚举\(d_i\),并强制它为最大的\(d_i\),那么 ...
- python:常用模块 知识整理
time模块 time.time() # 时间戳:1487130156.419527 time.strftime("%Y-%m-%d %X") #格式化的时间字符串:'2017-0 ...
- (转)从斐波那契数列看Java方法的调用过程
斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列安纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔 ...
- makefile学习之函数
GNU make支持内置函数以及用户自定义函数,下面结合例子简单介绍一下. gnu make版本: 4.1 一.用户自定义函数 格式: $(call macro-name{, param1 ···}) ...
- TP-LINK WR941N路由器研究
TP-LINK WR941N路由器研究 之前看到了一个CVE, CVE-2017-13772 是TP-Link WR940N后台的RCE, 手头上正好有一个TP-Link WR941N的设备,发现也存 ...
- OSG入坑之路[转]
转载自:https://segmentfault.com/a/1190000010506374?utm_source=tag-newest osg插件原理:https://blog.csdn.net/ ...
- Go语言基础之操作MySQL
Go语言操作MySQL MySQL是常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据库的 ...
- windows下用navicat链接虚拟机MySQL数据库的过程和问题解决
navicat远程连接虚拟机中的MySQL数据库 1.在linux查看mysql服务器IP地址 ifconfig 记住此IP navicat设置 设置完毕 遇到问题 一直连不上,在网上搜索了一下,主要 ...
- java-Freemarker-模板引擎学习
博客:Java模板引擎性能对比 Thymeleaf性能偏低. 博客:Java模板引擎 FreeMarker 综合性的介绍,内容有点粗糙. 博客:JavaEE进阶——FreeMarker模板引擎 ...
- 11.tensorboard网络结构
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 载入数据集 mnist = i ...