对于博客系统,发布文章等其他功能必须登录才能使用。这就非常有必要使用拦截器拦截请求。
SpringMVC
中可以通过实现HandlerInterceptor
接口定义一个拦截器。当然也可以继承抽象类HandlerInterceptorAdapter
。
定义一个拦截器AuthorizationInterceptor
public class AuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
boolean flag = false;
//判断用户是否登录
User user = (User) request.getSession().getAttribute("user");
if(user != null) {
flag = true;
} else {
request.setAttribute("message", "权限不足,请先登录");
request.getRequestDispatcher("/user/loginForm").forward(request, response);
}
return flag;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
preHandle
: 该方法在请求被处理前调用。返回false
表示该请求被拦截,之后不会被其它拦截器或者Controller
调用。postHandle
:Controller
方法被调用之后执行该方法,会在视图被返回渲染之前调用。afterCompletion
: 整个请求结束后调用。上述代码判断用户是否已经登录,如果未登录,转向到登录页面。
配置文件:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/article/*"/>
<bean class="com.sweat.interceptor.AuthorizationInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<mvc:mapping path="/article/*"/>
:拦截指定路径下的请求。