当前位置:编程学习 > JAVA >>

使用struts2自定义拦截实现统一的身份验证模式

最近在项目开发中需要进行身份的统一认证,之前.NET的思想就是通过父页面(基类)进行控制,现在使用struts2进行开发的话,当然还是使用易做图比较方便,而且比较省事,网上提供了很多实现的例子,但是都觉得对于新手而言都有一点不清楚如何使用起来。现在我把我的整个实现方式分享出来。

首先我的项目使用的是spring+struts2+mybatis,数据库端使用的pgsql ,现在的需求是我们需要在用户登录后,将用户信息存储在session中,在后续的操作中,需要在每次请求中都判断session是否失效,失效后就提示过期重新登录。

本次就使用易做图来实现,首先我们为验证建立一个包,取名com.tc.auth,在包下建立action包和资源文件 source.struts,文件结构大概如下图所示

 \
 


接着我们来编写AuthInterceptor.java文件的code 吧:


[java]
package com.tc.auth.action; 
 
import com.opensymphony.xwork2.ActionInvocation; 
import com.opensymphony.xwork2.interceptor.Interceptor; 
import com.tc.blacktea.common.TCSysConst; 
import com.tc.blacktea.util.SessionUtil; 
 
public class AuthInterceptor implements Interceptor { 
    private static final long serialVersionUID = 5582842221490358379L; 
 
    public void destroy() { 
    } 
 
    /**
     * 在服务启动的时候执行
     */ 
    public void init() { 
    } 
 
    public String intercept(ActionInvocation actionInvocation) throws Exception { 
        System.out.println("<<<用户认证检测易做图初始化..."); 
        // sessionUser 如果session中不存在用户在返回index视图  
        if (SessionUtil.GetSession("USER_SESSION_KEY") == null) {//这里我使用了自己写的session封装类  
            return "autherror"; 
        } 
        String result = actionInvocation.invoke();//这里是继续原先请求的invoke,不进行其他操作。  
        return result; 
    } 

package com.tc.auth.action;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.tc.blacktea.common.TCSysConst;
import com.tc.blacktea.util.SessionUtil;

public class AuthInterceptor implements Interceptor {
 private static final long serialVersionUID = 5582842221490358379L;

 public void destroy() {
 }

 /**
  * 在服务启动的时候执行
  */
 public void init() {
 }

 public String intercept(ActionInvocation actionInvocation) throws Exception {
  System.out.println("<<<用户认证检测易做图初始化...");
  // sessionUser 如果session中不存在用户在返回index视图
  if (SessionUtil.GetSession("USER_SESSION_KEY") == null) {//这里我使用了自己写的session封装类
   return "autherror";
  }
  String result = actionInvocation.invoke();//这里是继续原先请求的invoke,不进行其他操作。
  return result;
 }
}

 

接着我们来看下易做图的配置是如何编写的:


[html]
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
<struts> 
    <!-- default (全局)包配置 --> 
    <package name="userAuth" extends="struts-default" <strong><span style="color:#ff0000;">namespace="/"</span></strong>> 
        <interceptors> 
            <interceptor name="AuthInterceptor" 
                class="<strong><span style="color:#3333ff;">com.tc.auth.action.AuthInterceptor</span></strong>"> 
            </interceptor> 
            <!-- 默认的必须放在最下面! --> 
            <interceptor-stack name="userAuthStack"> 
                <interceptor-ref name="AuthInterceptor"></interceptor-ref> 
                <strong><span style="color:#ff0000;"><interceptor-ref name="defaultStack"></interceptor-ref></span></strong> 
            </interceptor-stack> 
        </interceptors> 
        <!-- 默认易做图,此包下所有的ACTION将都被拦截。如果ACTION再定义了易做图,则失效 --> 
        <<strong>default-interceptor-ref</strong> name="userAuthStack"></default-interceptor-ref> 
        <global-results> 
            <!-- 首页 --> 
            <result name="index">/jsp/index.jsp</result> 
            <result name="adminLoginPage">/jsp/index.jsp</result> 
            <result name="autherror">/jsp/Error.jsp</result> 
        </global-results> 
        <!-- 用户退出登录 --> 
        <!--<action name="existLogin_*" class="existLoginAction" method="{1}">  
            <result name="index">/jsp/Error.jsp</result> </action> --> 
    </package> 
</struts> 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <!-- default (全局)包配置 -->
 <package name="userAuth" extends="struts-default" <strong><span style="color:#ff0000;">namespace="/"</span></strong>>
  <interceptors>
   <interceptor name="AuthInterceptor"
   &nb

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,