Struts2自定義攔截器,實現登錄檢查。

RegPoate 8年前發布 | 2K 次閱讀 Java Struts2

由于在項目開發時,需要對大多數的頁面進行登錄檢查。當沒有登錄就無法進行操作,并返回到登錄頁面。為減少代碼量
利用Struts2中自定義攔截器的功能,實現登錄檢查。
</div>

 

JavaWeb/struts2框架    

一、新建struts-base.xml 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <include file="struts-default.xml"></include>
    <package name="checkLogin" extends="struts-default">
    <!--定義返回結果類型  -->
    <result-types>
        <result-type name="json" class="com.util.JSONResult"></result-type>
    </result-types>

    <!-- 定義一個攔截器 -->
    <interceptors>
        <interceptor name="authority" class="com.util.CheckLoginInterceptor"></interceptor>
        <!--定義一個攔截棧  -->
        <interceptor-stack name="myDefaultStack">
            <interceptor-ref name="defaultStack"></interceptor-ref><!--默認攔截棧  -->
            <interceptor-ref name="authority"></interceptor-ref><!--自定義攔截棧  -->
        </interceptor-stack>
    </interceptors>
    <!--設定默認棧  -->
    <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>

    <!--定義全局結果集  -->
    <global-results>
        <result name="login">/index.jsp</result>
    </global-results>

    </package>
</struts>


2.struts.xml 配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.devModel" value="true"></constant>
    <include file="struts-default.xml"></include>
    <include file="struts-base.xml"></include>

    <package name="default" extends="struts-default" namespace="/">

    <result-types>
        <result-type name="json" class="com.util.JSONResult"></result-type>
    </result-types>

        <action name="index" class="com.action.LoginAction">
            <result name="json" type="json"/>
        </action>

        <action name="code" class="com.action.CodeAction"></action>

    </package>

    <package name="show" extends="checkLogin" namespace="/">

        <action name="show" class="com.action.ShowAction">
            <result name="success">/main.jsp</result>
        </action>

    </package> 
</struts>

3.action

public class CheckLoginInterceptor extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        //獲取ActionContext
        ActionContext ac = invocation.getInvocationContext();
        //獲取session
        Map<String, Object> session = ac.getSession();
        //獲取session中的用戶信息
        String userName = (String)session.get("userName");
        //判斷用戶信息是否正確
        if(userName != null ) {
            return invocation.invoke();
        }else {
            return "login";
        }
    }

}

struts-base.xml      

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <include file="struts-default.xml"></include>
    <package name="checkLogin" extends="struts-default">
    <!--定義返回結果類型  -->
    <result-types>
        <result-type name="json" class="com.util.JSONResult"></result-type>
    </result-types>

    <!-- 定義一個攔截器 -->
    <interceptors>
        <interceptor name="authority" class="com.util.CheckLoginInterceptor"></interceptor>
        <!--定義一個攔截棧  -->
        <interceptor-stack name="myDefaultStack">
            <interceptor-ref name="defaultStack"></interceptor-ref><!--默認攔截棧  -->
            <interceptor-ref name="authority"></interceptor-ref><!--自定義攔截棧  -->
        </interceptor-stack>
    </interceptors>
    <!--設定默認棧  -->
    <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>

    <!--定義全局結果集  -->
    <global-results>
        <result name="login">/index.jsp</result>
    </global-results>

    </package>
</struts>

struts.xml  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.devModel" value="true"></constant>
    <include file="struts-default.xml"></include>
    <include file="struts-base.xml"></include>

    <package name="default" extends="struts-default" namespace="/">

    <result-types>
        <result-type name="json" class="com.util.JSONResult"></result-type>
    </result-types>

        <action name="index" class="com.action.LoginAction">
            <result name="json" type="json"/>
        </action>

        <action name="code" class="com.action.CodeAction"></action>

    </package>

    <package name="show" extends="checkLogin" namespace="/">

        <action name="show" class="com.action.ShowAction">
            <result name="success">/main.jsp</result>
        </action>

    </package> 
</struts>

[文件] CheckLoginInterceptor.java  

package com.util;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CheckLoginInterceptor extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        //獲取ActionContext
        ActionContext ac = invocation.getInvocationContext();
        //獲取session
        Map<String, Object> session = ac.getSession();
        //獲取session中的用戶信息
        String userName = (String)session.get("userName");
        //判斷用戶信息是否正確
        if(userName != null ) {
            return invocation.invoke();
        }else {
            return "login";
        }
    }

}
 本文由用戶 RegPoate 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!