拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。

在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

拦截器栈(Interceptor Stack)类似于过滤器链。拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。

我们可以自定义一个拦截器,拦截我们想要拦截的请求。这里我们让未登录的用户无法访问特定页面。话不多上代码。

一、页面:

1、login.jsp

<body><h2>user login</h2><!-- el表达式 直接获取session中的值-->${loginError }<form action="login.action" method="post">Name:<input type="text" value="username"/><br>password:<input type="password" value="password" /><br><input type="submit" value="login"/></form>
</body>

2、hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>hello!
</body>
</html>

二、Action:

loginAction.java

public class LoginAction extends ActionSupport implements ModelDriven<User>{private User user= new User();private Map<String,Object> session;public String login(){if("admin".equals(user.getUsername())&&"123".equals(user.getPassword())){session.put("loginInfo", user.getUsername());return SUCCESS;}else{session.put("loginError", "username or password error");return ERROR;}}@Overridepublic User getModel() {return user;}}

三、拦截器

AuthInterceptor.java

public class AuthInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invacation) throws Exception {ActionContext context=ActionContext.getContext();Map<String,Object> session=context.getSession();if(session.get("loginInfo")!=null){String result=invacation.invoke();return result;}else{return "login";}}}

四、配置文件

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.DynamicMethodInvacation" value="false"></constant><constant name="struts.devMode" value="true"></constant><package name="default" namespace="/" extends="struts-default"><!-- 注册拦截器 --><interceptors><interceptor name="auth" class="com.ouc.interceptor.AuthInterceptor"></interceptor><!-- 自定义拦截器栈 --><interceptor-stack name="myStack"><!--加入默认拦截器栈--><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="auth"></interceptor-ref></interceptor-stack></interceptors><action name="auth"> <result>/WEB-INF/page/hello.jsp</result><result name="login">/login.jsp</result><!-- 引用自定义拦截器栈 --><interceptor-ref name="myStack"></interceptor-ref></action><action name="login" class="com.ouc.action.LoginAction" method="login"><result>/WEB-INF/page/hello.jsp</result><result name="error">/login.jsp</result></action></package></struts>

转载于:https://blog.51cto.com/qmkkd/1840127

struts2拦截器--拦截未登录用户相关推荐

  1. vue的axios拦截器实现未登录页面跳转

    1.拦截器分为request请求拦截器和response响应拦截器 PS:request请求拦截器:发送请求前统一处理,如:设置请求头headers.应用的版本号.终端类型等. response响应拦 ...

  2. Spring Filter过滤器,Spring拦截未登录用户权限限制

    实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面. 比较好的做法是不管什么人都不能直接访问jsp页面,要访问就通过action,这样就变成了一个实实在在的权 ...

  3. SpringBoot——使用拦截器拦截未登录用户

    前置知识SpringBoot配置拦截器基于HandlerInterceptor接口实现,关键三个方法 preHandle()执行目标之前 postHandle()执行目标之后 afterComplet ...

  4. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  5. Java自定义异常、全局捕获异常、拦截器 实现动态控制登录超时

    Java自定义异常.全局捕获异常.拦截器 实现动态控制登录超时 参考文章: (1)Java自定义异常.全局捕获异常.拦截器 实现动态控制登录超时 (2)https://www.cnblogs.com/ ...

  6. spring拦截器 拦截和排除接口冲突

    以下为springboot案例: 场景:  某个规则下的绝大部分接口路径不需要经过拦截器, 但其中的某几个接口又需要经过拦截器. 例如: "/api/register/**" 模式 ...

  7. jsp中未登录用户也可以浏览页面的功能实现代码

    jsp中未登录用户也可以浏览页面的功能实现代码 <%!                int count=0;               %>                  < ...

  8. axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题

    axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题 最新版本axios限制了键,对键值做了白名单处理. 解决思路: 修改源码中的内容,添加一个键来报错额外属性. 或者:使用老 ...

  9. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案

    在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 参考文章: (1)在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 (2)https: ...

  10. 【项目经验】拦截器拦截入参出参

    文章目录 拦截器拦截入参出参 入参 出参 拦截器拦截入参出参 入参 @Overridepublic boolean preHandle(HttpServletRequest request, Http ...

最新文章

  1. 漫画:什么是 “抽象工厂模式” ?
  2. 电单车拉力赛的调试情况汇集
  3. 导致定时器失效_IIS进程回收导致定时器失效的解决方法(CMD命令)
  4. python完全新手教程-Python完全新手教程
  5. ThreadLocalT
  6. PaaS云计算平台服务商大集合
  7. 什么是卫星的有效载荷?
  8. 会议交流 | DataFunSummit 知识图谱在线峰会——链接知识图谱最前沿技术和最落地产业化应用的桥梁!...
  9. Mac下关闭Sublime Text 3的更新检查
  10. 如何查看使用 Cloud Toolkit 部署应用的实时日志
  11. Python提取任意长度整数的每位数字
  12. 头条 msra几道面试题
  13. windows apache 负载均衡配置 Tomcat集群配置
  14. 麦克风阵列原理(转载)
  15. 阵列信号处理 窄带信号与包络
  16. Python渗透测试之网络嗅探与欺骗
  17. 人工智能时代的投影融合软件
  18. Linux cp 复制文件强制覆盖的用法
  19. arduino的pinMode()函数
  20. 拳皇世界6月13服务器维护,拳皇世界2月8日例行维护 数据互通公告[图]

热门文章

  1. 2023华为OD机试真题C++实现【密室逃生游戏】
  2. Linux开源存储全栈详解
  3. 奔步前端面试(实习)
  4. mutt配置文件_配置mutt做邮件客服端
  5. Linux中的xargs命令(这是我发现的对于xargs命令的最好解释)
  6. 期刊要求的 Conflict of Interest(利益冲突)怎么写? 模板来了!
  7. 灵活用工与灵活就业的区别
  8. 【CNCF】CKA在线考试操作指南 - 高级云计算架构师
  9. 鞍点 Hessian矩阵
  10. 安卓和ios抓包--charles