Struts2中一个很重要的功能就是拦截器,例如你不想让没有登录的人进入到你其他的action就必须进行验证拦截。其实就是在用户进入action之前进行判断。拦截器有很多种用法,例如设置全局拦截器,方法拦截,设置白名单,黑名单等。这里我就介绍最常用的针对于特定的action进行拦截。
1.首先在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" />
<package name="spring-struts" namespace="/" extends="struts-default">
<!-- 定义权限控制拦截器 -->
<interceptors>
<interceptor name="authority" class="com.tp.action.authinterceptor<span style="font-family: Arial, Helvetica, sans-serif;">"/></span>
</interceptors>
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="luceneAction" class="LuceneAction">
<!-- 使用拦截器 -->
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</action>
</package>
</struts>
2.实现拦截器核心类:
package com.tp.action;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.tp.entity.Users;
@SuppressWarnings("serial")
public class AuthInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();
Users userName = (Users)session.getAttribute("users");
if(userName == null || userName.getAcount()==""){//错误,回到登录界面
return Action.LOGIN;
}else{
return invocation.invoke();
}
}
}
这里有几个地方需要注意:一个是class类对应的地址应该是拦截器类的地址,二是这个拦截器只对action有用,像jsp这种就拦截不了,需要使用过滤器进行过滤才行。