一、自定义拦截器开发
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);
}
}