登录拦截:
package com.htxx.interceptor;
import com.htxx.entity.utilpojo.Result;
import com.htxx.service.UserService;
import com.htxx.util.CookieUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
@Slf4j
public class UserInterceptor implements HandlerInterceptor{
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//执行handler之前先执行
//从cookie里取token信息
log.info("=========== 用户校验开始 ===========");
String username = CookieUtils.getCookieValue(httpServletRequest,"username");
String token = CookieUtils.getCookieValue(httpServletRequest,"token");
if(StringUtils.isBlank(username) || StringUtils.isBlank(token)){
log.info("=========== 用户校验结果 cookie没有 username token ===========");
//取当前请求的url
String requestURL = httpServletRequest.getRequestURL().toString();
//跳转登陆界面
httpServletResponse.sendRedirect("http://192.168.8.12:8080/AisinoYSHS_Web/page/login/login.html?url="+requestURL);
return false;
}
//取到用户名和token 去验证用户是否登录了
Result result = userService.getUserByToken(username,token);
if (result.getStatus() != 200){
log.info("=========== 用户校验结果 用户未登录 ===========");
//取当前请求的url
String requestURL = httpServletRequest.getRequestURL().toString();
//跳转登陆界面
httpServletResponse.sendRedirect("?url="+requestURL);
return false;
}
log.info("=========== 用户校验结果 已登录 ===========");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
跨域请求处理:
package com.htxx.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class CrossDomainInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object o) throws Exception {
//cors
log.info("=========== 跨域拦截器 cors 开始工作 ===========");
resp.setContentType("textml;charset=UTF-8");
resp.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
resp.setHeader("Access-Control-Max-Age", "0");
resp.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
resp.setHeader("Access-Control-Allow-Credentials", "true");
resp.setHeader("XDomainRequestAllowed","1");
log.info("=========== 跨域拦截器 cors 结束 ===========");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
注册拦截器:
package com.htxx.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Created by 123 on 2018-07-06
*/
@Configuration
@Slf4j
public class WebConfig extends WebMvcConfigurerAdapter {
public void addInterceptors(InterceptorRegistry registry) {
log.info("=========== 开始拦截器注册 ===========");
log.info("=========== 跨域拦截器注册 ===========");
registry.addInterceptor(new CrossDomainInterceptor());
log.info("=========== 用户登录拦截器注册 ===========");
registry.addInterceptor(new UserInterceptor());
// log.info("=========== 跨域拦截器注册 ===========");
// registry.addInterceptor(new ServiceMethodInterceptor());
log.info("=========== 拦截器注册完毕 ===========");
}
}
启动应用,在控制台显示:
09:50:26.706 INFO [ main] o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@40a4337a: startup date [Fri Jul 06 09:50:23 CST 2018]; root of context hierarchy
09:50:26.735 INFO [ main] com.htxx.interceptor.WebConfig - =========== 开始拦截器注册 ===========
09:50:26.735 INFO [ main] com.htxx.interceptor.WebConfig - =========== 跨域拦截器注册 ===========
09:50:26.736 INFO [ main] com.htxx.interceptor.WebConfig - =========== 用户登录拦截器注册 ===========
09:50:26.737 INFO [ main] com.htxx.interceptor.WebConfig - =========== 拦截器注册完毕 ===========
表明拦截器注册成功,现在随便访问个后台链接:
查看打印日志:
09:56:07.084 INFO [nio-8081-exec-1] c.h.i.CrossDomainInterceptor - =========== 跨域拦截器 cors 开始工作 ===========
09:56:07.084 INFO [nio-8081-exec-1] c.h.i.CrossDomainInterceptor - =========== 跨域拦截器 cors 结束 ===========
09:56:07.084 INFO [nio-8081-exec-1] c.h.i.UserInterceptor - =========== 用户校验开始 ===========
09:56:07.084 INFO [nio-8081-exec-1] c.h.i.UserInterceptor - =========== 用户校验结果 cookie没有 username token ===========
表明拦截器生效!