springmvc和struts2拦截器的简单使用以及配置

1、springmvc拦截器
 (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默认一定要加载的拦截器。
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页