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

本文共 2325 字,大约阅读时间需要 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页面,然后发布测试。此实例应重点是进一步掌握拦截器的配置使用。作为“实现资源权限访问”,此实例不具参考价值。

转载地址:http://jcmjl.baihongyu.com/

你可能感兴趣的文章
OpenSSL中关于RSA_new和RSA_free的内存泄漏
查看>>
c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
查看>>
Centos6.5快速配置可用网卡
查看>>
mvc框架模式
查看>>
vc 串口精灵软件分析
查看>>
C#结构体和字节数组的转换
查看>>
使用Node.js搭建静态资源服务器
查看>>
bluetooth service uuid
查看>>
Android组件安全
查看>>
DOM节点属性
查看>>
Eclipse对printf()不能输出到控制台的解决方法
查看>>
【转】Open Live Writer 插件更新
查看>>
Spring Security验证流程剖析及自定义验证方法
查看>>
单链表的创建,查找,删除,插入。
查看>>
Java知识积累——Properties类的使用示例
查看>>
转:分布式ID生成方法
查看>>
python学习---装饰器
查看>>
Facial Feature Detection
查看>>
例题6-17 UVa10562 Undraw the Trees(树)
查看>>
jq屏蔽鼠标右键复制,粘贴,选中功能
查看>>