Springmvc 拦截器设置
1登录的时候咋session中设置一个值,这个值自定义
2写一个拦截器
package com.tarena.Interceptor;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.tarena.entity.User;
/**
* 登录拦截器
* @author 公共
*
*/
public class LoginInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
System.out.println("-----------------------进入拦截器------------------------------");
User user=(User) request.getSession().getAttribute("user");
System.out.println(request.getSession());
if(user == null){
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
Writer witer = response.getWriter();
witer.write("{\"status\":1,\"message\":\"请先登录.\"}");
witer.close();
return false;
}else{
return true;
}
}
}
3配置文件
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/*"/>
<!-- <mvc:exclude-mapping path="/menu/*"/> -->
<bean class="com.tarena.Interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
原理:这样就可以这只拦截的路径,一般登录是bula不拦截的,其他的全部拦截,登录的时候给session赋值,然后其他的路劲在访问前,先执行拦截器zhon中的方法,ranh然后判断登录设置在session属性中的值是否存在,如果不存在,就被拦截,存在就能调用。