一、自定義攔截器開發
1、目錄結構
2、文件
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄頁面</title>
</head>
<body>
<h1>登錄頁面</h1>
<form action="<%=request.getContextPath()%>/user_login" method="post">
<input type="text" name="userName" value="zs">
<input type="password" name="password" value="123456">
<input type="submit" value="確定">
</form>
</body>
</html>
LoginAction.java
package com.test.ljq;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
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;
}
public String login() {
// TODO Auto-generated method stub
if("zs".equals(userName)&&"123456".equals(password)) {
ServletActionContext.getRequest().getSession().setAttribute("userName", userName);
System.out.println("登錄成功");
return SUCCESS;
}
else {
System.out.println("登錄失敗");
return LOGIN;
}
}
}
struts_ljq.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>
<package name="ljq_pg" namespace="/" extends="struts-default">
<!-- 註冊攔截器 -->
<interceptors>
<interceptor name="LoginInterc" class="com.test.interceptor.LoginIntercetor"></interceptor>
<!-- 擴展系統默認攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="LoginInterc"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用已配置的默認攔截器 -->
<default-interceptor-ref name="mystack"/>
<!-- 全局result -->
<global-results>
<result name="login">/ljq/login.jsp</result>
</global-results>
<!-- 登錄的Action -->
<action name="user_*" class="com.test.ljq.LoginAction" method="{1}">
<!-- 登錄不用擴展攔截器 -->
<interceptor-ref name="defaultStack"/>
<!-- 重定向 -->
<result name="success" type="redirectAction">index</result>
<!-- 轉發 -->
<!-- *代表方法 -->
<allowed-methods>login</allowed-methods>
</action>
<!-- 首頁的Action -->
<action name="index" class="com.test.ljq.IndexAction" method="index">
<result name="inx">/ljq/index.jsp</result>
</action>
</package>
<!-- include用於包含配置 -->
<include file="example.xml" />
<!-- Add packages here -->
</struts>
struts.xml
<include file="com/test/ljq/struts_ljq.xml" />
攔截器類:LoginIntercetor.java
package com.test.interceptor;
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 LoginIntercetor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
//獲取上下文
ActionContext actionContext = invocation.getInvocationContext();
//獲取Session
Map<String, Object> session = actionContext.getSession();
Object object = session.get("USER_INFO");
if(object!=null) {//已經存在這個session,證明登陸過
//放行
return invocation.invoke();
}
return Action.LOGIN;
}
}
IndexAction.java
package com.test.ljq;
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction extends ActionSupport{
private static final long serialVersionUID = 1L;
public String index() {
System.out.println("首頁執行代碼");
return "inx";
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>用戶中心</h1><br>
用戶信息:<%=session.getAttribute("userName").toString()%>
</body>
</html>
原始鏈接:點擊查看
二、方法級別攔截器
可以具體攔截到某一個action的具體方法。
struts_ljq.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>
<package name="ljq_pg" namespace="/" extends="struts-default">
<!-- 註冊攔截器 -->
<interceptors>
<!-- 調用方法級別的攔截器 -->
<interceptor name="LoginInterc" class="com.test.interceptor.MethodIntercetor">
<param name="ExcludeMethods">login</param>
</interceptor>
<!-- 擴展系統默認攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="LoginInterc"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用已配置的默認攔截器 -->
<default-interceptor-ref name="mystack"/>
<!-- 全局result -->
<global-results>
<result name="login">/ljq/login.jsp</result>
</global-results>
<!-- 登錄的Action -->
<action name="user_*" class="com.test.ljq.LoginAction" method="{1}">
<!-- 登錄不用擴展攔截器 -->
<!-- <interceptor-ref name="defaultStack"/> -->
<!-- 重定向 -->
<result name="success" type="redirectAction">index</result>
<!-- 轉發 -->
<!-- *代表方法 -->
<allowed-methods>login</allowed-methods>
</action>
<!-- 首頁的Action -->
<action name="index" class="com.test.ljq.IndexAction" method="index">
<result name="inx">/ljq/index.jsp</result>
</action>
</package>
<!-- include用於包含配置 -->
<include file="example.xml" />
<!-- Add packages here -->
</struts>
攔截器類:MethodIntercetor
package com.test.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class MethodIntercetor extends MethodFilterInterceptor{
private static final long serialVersionUID = 1L;
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
return null;
}
//需要攔截的
@Override
public void setIncludeMethods(String includeMethods) {
// TODO Auto-generated method stub
super.setIncludeMethods(includeMethods);
}
//不需要攔截的
@Override
public void setExcludeMethods(String excludeMethods) {
// TODO Auto-generated method stub
super.setExcludeMethods(excludeMethods);
}
}