博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 拦截器 注册 和 jwt 和 跨域
阅读量:3952 次
发布时间:2019-05-24

本文共 7123 字,大约阅读时间需要 23 分钟。

package com.example.mongodemo.config;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @Author lyr * @create 2020/3/24 1:18 * 拦截器 * 要在 webMvcConfiguration注册 */@Slf4j@Componentpublic class WebInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("开始"); //打印对应 处理请求的 Controller类 log.info(((HandlerMethod)handler).getBean().getClass().getName()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("运行中"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("结束"); //抛出异常的话 会有 ex参数 }}

然后 要在配置上面注册一下这个拦截器

package com.example.mongodemo.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/** * @Author lyr * @create 2020/3/23 19:53 */@Configuration //标注时配置类public class MvcConfig implements WebMvcConfigurer {
@Autowired private WebInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor); } @Bean public MvcConfig MyMvcConfig() {
MvcConfig mvcConfig = new MvcConfig() {
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } }; return mvcConfig; }}
package com.lyr.cakemanagerv2.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;/** * @Author lyr * @create 2020/7/30 11:27 */@Configuration //标注时配置类public class WebConfig implements WebMvcConfigurer {
@Resource private TokenInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor) .addPathPatterns("/**") .excludePathPatterns("/test"); } @Bean public WebConfig MyMvcConfig() {
return new WebConfig(); }}

拦截器

package com.lyr.cakemanagerv2.config;import dto.Result;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import token.JWTCode;import token.JwtUtil;import util.web.WebUtil;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @Author lyr * @create 2020/7/29 23:10 */@Slf4j@Componentpublic class TokenInterceptor  implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
setHeader(httpServletResponse); String token = httpServletRequest.getHeader("token"); String uri = httpServletRequest.getRequestURI(); log.info("{} -> {}",httpServletRequest.getMethod(),uri ); try{
JWTCode code = JwtUtil.judgeToken(token); switch (code) {
case OVERDUE:{
Result result = Result.from("token过期",666); //过期 WebUtil.renderJson(httpServletResponse,result); return false; // break; } case ERROR:{
Result res = Result.from("请求头异常",666); WebUtil.renderJson(httpServletResponse,res); return false; // break; } default:{
} } }catch (Exception ex) {
WebUtil.renderText(httpServletResponse,"服务器繁忙"); // WebUtil.renderJson(,httpServletResponse); return false; } //如果校验不通过 拒绝执行 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 {
} private void setHeader(HttpServletResponse res) {
HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With"); }}

前后端分离跨域问题

跨域问题也可以用过滤器来解决

package com.lyr.cakemanagerv2.config;import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * @Author lyr * @create 2020/7/21 14:38 */@Componentpublic class WebFilter implements Filter {
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
setHeader((HttpServletResponse) res); chain.doFilter(req, res); } private void setHeader(HttpServletResponse res) {
HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With"); }}

转载地址:http://dauzi.baihongyu.com/

你可能感兴趣的文章
idea运行gradle项目
查看>>
es安装ltr插件
查看>>
开源ltr-es-7.6.2代码到本地idea打开出现各种错误总结
查看>>
Requests实践详解&& python通过连接开启https的elasticsearch7 服务器
查看>>
ES查询流程源码解析
查看>>
ldaps与ldap over TLS
查看>>
jvm为什么把-Xms和-Xmx的值设置成一样
查看>>
2021-01-21对map进行key或者value排序
查看>>
ConcurrentHashMap 1.7和1.8的区别
查看>>
阻塞锁与自旋锁
查看>>
【面试官:select语句和update语句分别是怎么执行的
查看>>
scala学习之安装问题
查看>>
LDAP常见错误码
查看>>
linux yum安装rpm包出现问题
查看>>
idea编译报错类似xxx.java:[85,65] 错误: 找不到符号
查看>>
ArrayList复制
查看>>
idea打开项目时,文件左下角显示橙色J
查看>>
SQL注入
查看>>
linux中ldconfig的使用介绍
查看>>
ldap适合入门学习
查看>>