Struts攔截器


Struts攔截器和過濾器的區別:

過濾器:對所有的東西都過濾。包括css,.js,.jpg等。

攔截器:只對action攔截。是struts工具。

一、攔截器配置。

1.創建一個類,讓其繼承自AbstractInterceptor

2.配置struts.xml

1)添加<interceptors>配置節,添加攔截器配置。
2)在action中引用,<interceptors>中的配置。

注意:
1.在action中需要添加defaultStack引用
2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的時候引用此stack即可。

<?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.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
    
        <interceptors>
            <interceptor name="lanjieqi" class="com.itnba.maya.util.Lanjieqi"></interceptor>
                <interceptor-stack name="newStack">
                <interceptor-ref name="lanjieqi"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>            
         </interceptors>
        <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">
         <!-- 直接引用newStack -->
        <interceptor-ref name="newStack"></interceptor-ref>
            <result>
                {1}_{2}.jsp
            </result>
        </action>
    </package>

</struts>

二、在攔截器中使用內置對象。

獲取Session

1.ActionContext 獲取Map.
2.ServletActionContext
3.實現SessionAware接口

 

*****************************************************************

實例:使用攔截器實現登錄身份驗證。

有兩個action是不能攔截。打回登錄界面action,登錄提交驗證並寫 session的action

在登錄驗證的auth方法中,分兩種情況:
1.第一次登錄驗證。此時,session中沒有信息,需要向session中添加登錄信息
2.非第一次登錄驗證。此時,session中有信息,不需要再入session中添加信息

建一個User對象

package com.itnba.maya.model;

public class User {
    private String userName;
    private String password;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

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.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
    <!--  -->
        <interceptors>
            <interceptor name="lanjieqi" class="com.itnba.maya.util.Lanjieqi"></interceptor>
            <interceptor name="Loginlanjieqi" class="com.itnba.maya.util.Loginlanjieqi"></interceptor>
                <interceptor-stack name="newStack">
                <interceptor-ref name="lanjieqi"></interceptor-ref>
                <interceptor-ref name="Loginlanjieqi"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>            
        </interceptors>
        <global-results>
            <result name="nologin">Login_login.jsp</result><!-- session里沒有值再跳回Login_login.jsp -->
        </global-results>
        <!-- Login_login和Login_home不能攔截掉,寫上面不受攔截器控制  -->
        <action name="Login_login" class="com.itnba.maya.controller.LoginAction" method="login">
            <result>Login_login.jsp</result>
        </action>
        <action name="Login_home" class="com.itnba.maya.controller.LoginAction" method="home">
            <result>Login_home.jsp</result>
        </action>
        <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">
        <interceptor-ref name="newStack"></interceptor-ref>
            <result>
                {1}_{2}.jsp
            </result>
        </action>
    </package>

   
</struts>

 

ActionSupport類

package com.itnba.maya.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.itnba.maya.model.User;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    HttpSession session=ServletActionContext.getRequest().getSession();
    private User user;
    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    
    public String login(){  //login頁面直接跳走
        return SUCCESS;
    }
    
    public String home(){
        //模擬從數據庫中查出來
        List<String> list=new ArrayList<String>();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        list.add("zhaoliu");
        //第一次session肯定是null的
        Object obj=session.getAttribute("user");
        if(obj==null){
            if(user!=null){ //不判斷下會空會報空指針錯誤
                if(list.contains(user.getUserName())){ //看看賬號是否有,這里沒驗證密碼
                    session.setAttribute("user", user.getUserName());//有就往session放值
                    return SUCCESS;
                }
                else{
                    return "nologin"; //不包含就走"nologin"
                }
            }else{
                return "nologin";
            }    
            
        }
        else{
            return SUCCESS;
        }    
    }

}

 

攔截器的類,判斷sessioni是否有值

package com.itnba.maya.util;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

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

public class Loginlanjieqi extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        //先獲取session
        HttpSession session=ServletActionContext.getRequest().getSession();
        //session如果沒值就轉到nologin
        if(session.getAttribute("user") == null){
            return "nologin";
        }
        return arg0.invoke();
    }

}

jsp頁面

登錄

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>這是登錄頁面</h1>
<form action="Login_home">
賬號:<input type="text" name="user.userName"><br>
密碼:<input type="password" name="user.password"><br>
<input type="submit" value="登錄">
</form>

</body>
</html>

home驗證session之后的頁面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
賬號:<s:property value="user.userName"/>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM