1、springmvc拦截器
(1).先手动创建一个用于拦截请求的类,实现HandlerInteceptor接口,实现接口的方法,在根据自己的业务需求重写方法。HandlerInteceptor接口的方法有三个,分别是:preHandle()(在请求进入controller之前执行)、postHandle()(在请求进入controller、返回ModelAndView之前执行)、afterCompletion()(在执行完handler之后执行)。
代码:
package com.manage.inteceptor;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInteceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("执行方法之后。");
}
throws Exception {
System.out.println("进入方法之后。");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
HttpSession session = request.getSession();
String name = (String) session.getAttribute("login_name");
if(name != null && name != "") {
return true; //true表示放行,false表示拦截、不向下执行
}else {
response.sendRedirect("login");
return false;
}
}
}
(2).在springcxm.xml中配置拦截器:
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截的请求 -->
<mvc:mapping path="/**"/>
<!-- 不拦截的请求 -->
<mvc:exclude-mapping path="/loginController/login.do"/>
<!-- 拦截器所在类路径 -->
<bean class="com.manage.inteceptor.LoginInteceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
2、struts2拦截器
(1).先定义一个拦截器,继承MethodFilterInterceptor类,实现方法并在doIntercept方法里边处理逻辑:
package com.inteceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInteceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> session = actionContext.getSession();
String username = (String) session.get("username");
String result = null;
if(username != null && username != ""){
System.out.println("登录名="+username);
result = invocation.invoke();
}
return result;
}
}
还有两个方法自己提供了空实现,这里就没有写。
(2).在struts.xml中配置拦截器类:
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="loginInteceptor" class="com.inteceptor.LoginInteceptor">
</interceptor>
<interceptor-stack name="myInteceptor">
<!-- struts默认执行的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginInteceptor">
<param name="excludeMethods">login,doLogin</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInteceptor"></default-interceptor-ref>
<action name="login" class="com.action.LoginAction" method="login">
<result name="success" >/WEB-INF/jsp/hello.jsp</result>
<result name="error">index.jsp</result>
</action>
<action name="hello" class="com.action.LoginAction" method="list">
<result name="success">/WEB-INF/jsp/list.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
这里注意的是一定要配置默认的拦截器defaultStack,而且要放到自定义拦截器的前面。这样它才会首先加载struts默认一定要加载的拦截器。
(1).先手动创建一个用于拦截请求的类,实现HandlerInteceptor接口,实现接口的方法,在根据自己的业务需求重写方法。HandlerInteceptor接口的方法有三个,分别是:preHandle()(在请求进入controller之前执行)、postHandle()(在请求进入controller、返回ModelAndView之前执行)、afterCompletion()(在执行完handler之后执行)。
代码:
package com.manage.inteceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInteceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("执行方法之后。");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
System.out.println("进入方法之后。");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
HttpSession session = request.getSession();
String name = (String) session.getAttribute("login_name");
if(name != null && name != "") {
return true; //true表示放行,false表示拦截、不向下执行
}else {
response.sendRedirect("login");
return false;
}
}
}
(2).在springcxm.xml中配置拦截器:
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截的请求 -->
<mvc:mapping path="/**"/>
<!-- 不拦截的请求 -->
<mvc:exclude-mapping path="/loginController/login.do"/>
<!-- 拦截器所在类路径 -->
<bean class="com.manage.inteceptor.LoginInteceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
2、struts2拦截器
(1).先定义一个拦截器,继承MethodFilterInterceptor类,实现方法并在doIntercept方法里边处理逻辑:
package com.inteceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInteceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> session = actionContext.getSession();
String username = (String) session.get("username");
String result = null;
if(username != null && username != ""){
System.out.println("登录名="+username);
result = invocation.invoke();
}
return result;
}
}
还有两个方法自己提供了空实现,这里就没有写。
(2).在struts.xml中配置拦截器类:
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="loginInteceptor" class="com.inteceptor.LoginInteceptor">
</interceptor>
<interceptor-stack name="myInteceptor">
<!-- struts默认执行的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginInteceptor">
<param name="excludeMethods">login,doLogin</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInteceptor"></default-interceptor-ref>
<action name="login" class="com.action.LoginAction" method="login">
<result name="success" >/WEB-INF/jsp/hello.jsp</result>
<result name="error">index.jsp</result>
</action>
<action name="hello" class="com.action.LoginAction" method="list">
<result name="success">/WEB-INF/jsp/list.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
这里注意的是一定要配置默认的拦截器defaultStack,而且要放到自定义拦截器的前面。这样它才会首先加载struts默认一定要加载的拦截器。