1. 程式人生 > >Struts攔截器

Struts攔截器

  • Action頁面
package p1;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import entity.User;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;

public class _1030 extends ActionSupport implements ModelDriven<User> {
    private User user=new User();


    @Override
    public User getModel() {
        return user;
    }

    public String dologin(){
        HttpServletRequest httpServletRequest= ServletActionContext.getRequest();
        String username=httpServletRequest.getParameter("username");
        String password=httpServletRequest.getParameter("password");
        if("admin".equals(user.getUsername())&&"admin".equals(user.getPassword())){
            httpServletRequest.getSession().setAttribute("username",user.getUsername());
            return SUCCESS;
        }
        else {
            return "Failure";
        }
    }
    public String login(){
        return "login";
    }
}
  •  攔截器類
package p2;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class LoginInterceptor extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
        // 攔截器的邏輯
        //1 得到session
        HttpServletRequest request= ServletActionContext.getRequest();
        HttpSession session=request.getSession();
        Object object=session.getAttribute("username");
        if(object!=null){
            // 類似於放行的操作
            return actionInvocation.invoke();
        }
        else{
            // 不執行action方法
            return "login";
        }
    }
}
  •  註冊攔截器
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="No.1" namespace="/" extends="struts-default">
        <!-- 宣告攔截器 -->
        <interceptors>
            <interceptor name="LoginIntercept" class="p2.LoginInterceptor"/>
        </interceptors>
        <action name="time" class="test.Time">
            <result name="time">/time.jsp</result>
        </action>
        <action name="login" class="p1._1030" method="login">
            <!-- 使用自定義的攔截器 -->
            <interceptor-ref name="LoginIntercept">
            </interceptor-ref>
            <!-- 把預設攔截器手動使用一次 -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="login">/jsp/login.jsp</result>
        </action>
        <action name="dologin" class="p1._1030" method="dologin">
            <interceptor-ref name="LoginIntercept">
                <param name="excludeMethods">dologin</param>
            </interceptor-ref>
            <!-- 把預設攔截器手動使用一次 -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/jsp/success.jsp</result>
            <result name="Failure">/jsp/failure.jsp</result>
            <result name="login">/jsp/login.jsp</result>
        </action>
    </package>
</struts>
  •  登入jsp
<%--
  Created by IntelliJ IDEA.
  User: jdq8576
  Date: 2018/10/31
  Time: 10:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>
</head>
<body>
<form name="login" action="dologin.action" method="post">
    <table>
        <tr>
            <td>使用者名稱:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密碼:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="reset" value="重置"></td>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>

攔截器執行的時間:action物件建立之後,action方法執行之前

Aop面向切面程式設計 :有一個最基本的功能,擴充套件之後,改原始碼(原始思想) aop思想,不改原始碼 責任鏈模式:過濾鏈和它很相似 過濾鏈:一個請求多個過濾器過濾 責任鏈模式:要執行多個操作,有新增,修改,刪除操作 首先執行新增操作,新增操作之後類似於放行操作,然後執行修改操作 ...

過濾器和攔截器的區別: 過濾器 過濾任意的內容;攔截器攔截內容:action servlet和action的區別:建立時間不同;次數也不同;servlet一次建立;action建立多次,每次訪問建立一次,

讓攔截器和action有關係 通過配置檔案

新增攔截器 1 建立類 繼承methodfilterinterceptor類 2 重寫方法 3 註冊攔截器

一旦自定義攔截器 那些預設的攔截器就不會執行 解決:把預設的攔截器手動使用一次