zoukankan      html  css  js  c++  java
  • strut2 模拟拦截器

      需求:用户登录的情况下可以访问action的方法,用户没有登录时不允许访问action中的方法并提示'你没有权限访问"。

      设计思路:建立一个jsp页面,当请求该页面时,设置用户为登录状态。若没有先请求该jsp页面而去访问action中的方法则不允许。

      实现:

    1.    建立一个user.jsp页面,设置用户为登录状态:
      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <%
          request.getSession().setAttribute("user", "itcast");
      %>
      
       用户已经登录
    2. 自定义一个拦截器类,用来判断用户是否登录,如果没有则返回到全局视图页面,如果已经登录则允许执行action中的方法:
      package cn.itcast.interceptor;
      
      import com.opensymphony.xwork2.ActionContext;
      import com.opensymphony.xwork2.ActionInvocation;
      import com.opensymphony.xwork2.interceptor.Interceptor;
      
      public class PermissionInterceptor implements Interceptor {
      
          public void destroy() {
          }
      
          public void init() {
          }
      
      //拦截器主要的方法
      public String intercept(ActionInvocation invocation) throws Exception { Object user = ActionContext.getContext().getSession().get("user"); if(user!=null) return invocation.invoke(); //如果user不为null,代表用户已经登录,允许执行action中的方法 ActionContext.getContext().put("message", "你没有权限执行该操作"); return "success"; } }
    3. action中的代码如下:
      package cn.itcast.action;
      
      public class HelloWorldAction {    
          private String message;
          
          public String getMessage() {
              return message;
          }
      
          public void setMessage(String message) {
              this.message = message;
          }
      
          public String addUI(){
              this.message = "addUI";
              return "success";
          }
      
          public String execute() throws Exception{
              this.message = "execute";
              return "success";
          }
      }
    4. 注册拦截器,在struts.xml中配置拦截器,代码如下:
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
      
      <struts>
          <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
          <constant name="struts.action.extension" value="do,action"/>
          <constant name="struts.multipart.maxSize" value="10701096"/>
          
          <package name="employee" namespace="/control/employee" extends="struts-default">
              <interceptors>
                   <!--配置自定义的拦截器-->
                  <interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor"/>
                  <!--配置一个拦截栈-->
                  <interceptor-stack name="permissionStack">
                       <!--struts2的拦截栈不能丢,且放在自定义的拦截器前面-->
                      <interceptor-ref name="defaultStack"/>
                      <interceptor-ref name="permission" />
                  </interceptor-stack>
              </interceptors>
              <global-results><!--配置全局视图-->
                  <result name="success">/WEB-INF/page/message.jsp</result>
              </global-results>
              <action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
                  <interceptor-ref name="permissionStack" /><!--为action配置拦截器-->
              </action>
          </package>
      </struts>
    5. 测试:在浏览器中输入:http://localhost:8080/xxx/list_excute.action  因为用户是直接访问action中的方法,所以页面提示没有权限访问。
    6. 在浏览器中请求user.jsp页面,因为用户已经设为登录状态,所以可以正常访问。
  • 相关阅读:
    DELPHI 表格控件 DBGridEh 属性设置详解
    Delphi保存网页中的图片
    Delphi 文件转换Base64
    CEF 各个版本适应的平台参考表
    让dcef3支持mp3和h.264 mp4解码播放
    Cef 重写alert与confirm弹窗
    dcef3 基本使用经验总结
    CEF3 命令行 CefCommandLine 所有选项 与 开发中使用的测试网址
    php连接sql server(win10+phpstudy+navicat+php+sql server)
    C语言随机数
  • 原文地址:https://www.cnblogs.com/kailing-con/p/4196958.html
Copyright © 2011-2022 走看看