Struts攔截器
阿新 • • 發佈:2018-12-18
- 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 註冊攔截器
一旦自定義攔截器 那些預設的攔截器就不會執行 解決:把預設的攔截器手動使用一次