转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

为了说明此问题,我们建立struts2auth项目,流程图如下:

简短说明:当我们访问main.jsp页面,并试图通过此页面中的链接地址:note.action来访问到.../WEB-INF/note.jsp页面时,由于访问的note.action配置了拦截器,所以会被拦截,如果拦截器判断登录则可以访问,否则会跳到登录页面。如果我们从登录页面直接到main.jsp页面,再来访问note.action时,同样被拦截但是由于登录过,所以可以访问到此action对应的内容。由这里的分析可以看出关键点就登录成功时给出标志提供给拦截器判断是否成功登录。
步骤一,搭建好相关的开发环境,并准备好登录页面login.jsp,代码如下:
<form action="<%=request.getContextPath()%>/login.action" method="post">

姓名:<input type="text" name="username"><br>

密码:<input type="password" name="password"><br>

<input type="submit" value="登录">

</form>
步骤二,建立相应的Action:LoginAction。代码如下:
package com.asm;

public class LoginAction extends ActionSupport {

private String username;

Map session;

public String execute() throws Exception {

if(username.equals("admin")){

session = ActionContext.getContext().getSession();

session.put("loginSign", "loginSuccess");

return SUCCESS;

}else{

return LOGIN;

}

}
...省略username的get/set方法

}

说明:我们这里是设定了只有登录用户名为admin时,此Action才设置登录标志。另这里获取Session对象采取的是“与Servlet解耦合的非IOC方式”。
步骤三,编写拦截器类,代码如下:
package com.asm.interceptor;

public class AuthInterceptor extends AbstractInterceptor {

public String intercept(ActionInvocation invocation) throws Exception {

Map session = invocation.getInvocationContext().getSession();

// session=ActionContext.getContext().getSession();

if (session.get("loginSign") == null) {

return "login";

} else {

String result = invocation.invoke();

return result;

}

}

}

步骤四,配置此Action相关,主要配置内容如下:
<struts>

<package name="tokenTest" extends="struts-default">

<interceptors>

<interceptor name="auth"

class="com.asm.interceptor.AuthInterceptor">

</interceptor>

<interceptor-stack name="authStack">

<interceptor-ref name="auth"></interceptor-ref>

<interceptor-ref name="defaultStack"></interceptor-ref>

</interceptor-stack>

</interceptors>

<action name="login" class="com.asm.LoginAction">

<result name="success">/main.jsp</result>

<result name="login">/login.jsp</result>

</action>

<action name="note">

<result>/WEB-INF/note.jsp</result>

<result name="login">/login.jsp</result>

<interceptor-ref name="authStack"></interceptor-ref>

</action>

</package>

</struts>

说明:结合前面的一些代码来看,当我们为note.action配置了前面写所的AuthInterceptor拦截器时,如果我们要访问note.action,拦截器会首先判断是否登录,如果登录则继续把请求传递下去,如果没有登录则会返回到登录页面。
步骤五、编写相关的其它jsp页面,然后发布测试。此实例应重点是进一步掌握拦截器的配置使用。作为“实现资源权限访问”,此实例不具参考价值。

转载于:https://www.cnblogs.com/sharpest/p/5587636.html

35.使用拦截器实现权限验证相关推荐

  1. Vue项目使用拦截器和JWT验证 完整案例

    挺详细的一个案例项目,值得参考! 作者:YXi https://juejin.im/post/6844903959883218951) https://gitee.com/gitee_fanjunya ...

  2. 用struts2的拦截器实现登录验证,同时登录界面加上验证码

    1.验证码实现:AuthorityAction 1 package com.sram.action; 2 3 import java.awt.Color; 4 import java.awt.Font ...

  3. SpringBoot项目使用JWT+拦截器实现token验证

    利用token进行用户身份验证 流程 客户端使用用户名和密码请求登录 服务端收到登录请求,验证用户名和密码 验证成功后,服务端会签发一个token,再把这个token返回给客户端 客户端收到token ...

  4. interceptor方式拦截请求进行权限验证和签名验证

    外部应用调用我方接口时通常需要做安全校验,这里记录一种验签方式,基于interceptor实现. 先看看接口的定义: @ApiOperation(value = "同步第三方商品数据&quo ...

  5. Spring MVC使用拦截器实现权限控制

    1.首先准备对应的架包 2.看看项目的架构 3.基本的web.xml文件 <!--?xml version="1.0" encoding="UTF-8"? ...

  6. session 拦截器中获取不到session值_拦截器实现登陆验证

    案例效果: 介绍↑:进入主页,分别看到"登录页面"和"首页". 介绍↑:点击进入"登录页面"后输入"用户名和密码"点击提 ...

  7. dio拦截器 flutter_Flutter开发 Dio拦截器实现token验证过期的功能

    前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有"token验证过期"的需求,所以接下来我简单总结一下在Flut ...

  8. mybatis拦截器实现权限管理

    框架设计 基于Spring Security+JWT技术实现登录认证和访问授权,基于Mybatis 拦截器实现数据权限的控制.由于已有前文介绍Spring Security如有兴趣可以查看,在此将重点 ...

  9. 基于SSH2框架Struts2拦截器的登录验证实现 来自菠萝大象

    本文为菠萝大象原创,如要转载请注明出处. 通过之前的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解系列文章,我们已经成功将这三种框架整合到了一起, 这次大 ...

最新文章

  1. 诺贝尔物理学奖得主Arthur Ashkin去世,他发明了“激光镊子”,曾抱怨被诺奖遗忘...
  2. 【转】R语言 RStudio快捷键
  3. c/c++ 字符串分割
  4. bmp180气压传感器工作原理_陕西压力传感器的工作原理信息推荐
  5. Java工作笔记-使用jquery.timer.js实现数据自动刷新
  6. [k8s]dashboard1.8.1搭建( heapster1.5+influxdb+grafana)
  7. HALCON:如何结合面向对象和面向过程的代码
  8. 【java笔记】模拟B/S服务器
  9. 微信小程序 post git 的请求坑
  10. 北斗导航 | RAIM算法流程图
  11. 微信HOOK之二叉树获取信息 201-12-25
  12. Matlab伯德图如何修改相频特性的角度?终于解决了!
  13. 大众帕萨特卡尔福安卓智能车载导航评测
  14. matlab仿真光学拍,用matlab研究光学拍
  15. 冒犯有时是必要的:如何开启一段亲密关系?
  16. c语言输出最大的数ns流程图_c语言中swtich怎么画流程图
  17. 常见14种手机传感器
  18. cogs 259. 亲戚
  19. Windows Server 2012 R2 Backup 裸机恢复
  20. (转)802.1Q标准中TAG字段简单说明

热门文章

  1. jquery关于多个显示隐藏
  2. 微信支付现金红包接口(转)
  3. 【开源项目之路】jquery的build问题
  4. 《认清C++语言》のrandom_shuffle()和transform()算法
  5. 根文件系统构建(Yocto方式)
  6. ffmpeg 转换flv压缩大小_ffmpeg转换参数和压缩输出大小的比率 参考 最新版本FFMPEG...
  7. 前端 js 非控件 使用标签打印机 打印二维码和文本_青岛Web前端(HTML5)面试题分享...
  8. python print 换行_Python学习 | Python的基础语法
  9. java 树面试题_java——二叉树面试题
  10. Spring注解驱动开发