例子:验证用户登录,如果用户未登录,则给出对应提示
(1)创建拦截器类 LoginInterceptor,并继承 HandlerInterceptorAdapter 接口,重写 preHandle() 方法。
package com.zyq.interceptor;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.zyq.beans.SessionKey;
/**
* 登录拦截器(判断用户是否登录)
* @author zyq
* @date 2019-04-23
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 从session中获取用户对象(该对象在用户登录的时候存于session中)
Object object = request.getSession().getAttribute(SessionKey.USER_OBJECT);
// 用户未登录,则返回false, 拦截该请求
if (object == null) {
PrintWriter printWriter = response.getWriter();
printWriter.write("请登录");
return false;
}
// 用户已登录,则返回true, 放行该请求
return true;
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// TODO Auto-generated method stub
super.afterConcurrentHandlingStarted(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
}
}
(2)建立配置类 WebConfig,实现 WebMvcConfigurer,记得打上 @Configuration 注解
这里拦截的为域名/self/路径下的所有请求
package com.zyq.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.zyq.interceptor.LoginInterceptor;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/self/**");
}
}
(3)启动程序,在未登录的情况下,访问相关页面