博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
35.使用拦截器实现权限验证
阅读量:6292 次
发布时间:2019-06-22

本文共 2377 字,大约阅读时间需要 7 分钟。

转自: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

你可能感兴趣的文章
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>