跨域 springboot2.1 拦截器跨域 ajax请求例子

/**
 * Copyright 2018-2020 stylefeng & fengshuonan (https://gitee.com/stylefeng)
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hanhan.interceptor; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.hanhan.Cnst.JwtConstants; import com.hanhan.utils.JwtTokenUtil; import com.hanhan.utils.RenderUtil; import hanhan.Msg; import hanhan.p; import io.jsonwebtoken.JwtException; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; /** * Rest Api接口鉴权 *HandlerInterceptorAdapter * @author stylefeng * @Date 2018/7/20 23:11 */ public class RestApiInteceptor implements HandlerInterceptor { private org.slf4j.Logger log= org.slf4j.LoggerFactory.getLogger(this.getClass()); //handler,是指controller的@Controller注解下的整个方法名 //ResourceHttpRequestHandler是静态资源 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //跨域,一定要放在最前面 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); //20天有效 response.setHeader("Access-Control-Max-Age", "1728000"); response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setCharacterEncoding("UTF-8"); // System.out.println("¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥《"+JSON.toJSONString(handler)+"》¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥44"); p.p("request.getHeader(JwtConstants.AUTH_HEADER) "+request.getHeader(JwtConstants.AUTH_HEADER)); // response.setCharacterEncoding("UTF-8"); // response.setHeader("Content-type", "text/html;charset=UTF-8"); // response.setHeader("Access-Control-Allow-Origin", "*"); // response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token"); // response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"); // 这个可以用过滤器统一处理 // CORS "pre-flight" request if (handler instanceof org.springframework.web.servlet.resource.ResourceHttpRequestHandler) { return true; } // try { // handlerMethod = (HandlerMethod) handler; // } catch (Exception e) { // e.printStackTrace(); // } return check(request, response, handler); } private boolean check(HttpServletRequest request, HttpServletResponse response, Object handler) { log.info("======通过jwt拦截器=开始====="); // if (request.getServletPath().contains(JwtConstants.AUTH_PATH)) { // return true; // } final String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER); System.out.println("================2=="+requestHeader+"======="+JSON.toJSONString(request.getHeaderNames())+"========"); Msg msg=new Msg().setStatus("0"); String authToken; if (requestHeader != null && requestHeader.startsWith("Bearer ")) { authToken = requestHeader.substring(7); //验证token是否过期,包含了验证jwt是否正确 try { boolean flag = JwtTokenUtil.isTokenExpired(authToken); if (flag) { msg.setMsg("jwt错误或者token过期"); RenderUtil.renderJson(response,msg); return false; } } catch (JwtException e) { msg.setMsg("jwt token解析失败"); //有异常就是token解析失败 RenderUtil.renderJson(response,msg); return false; } } else { msg.setMsg("header开头没有带上Bearer以及一个空格"); //header没有带Bearer字段 RenderUtil.renderJson(response,msg); return false; } System.out.println("sdlkfjaslkfdj111111111111111111111lasfjdadslfkj"); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { // System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse res, Object o, Exception e) throws Exception { // System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } }

 

 

 

 

 

 

 

 

 

 

 

package com.hanhan.config;

//import com.alibaba.druid.pool.DruidDataSource;
//import com.alibaba.druid.support.http.StatViewServlet;
//import com.alibaba.druid.support.http.WebStatFilter;
//import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
//import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
//import org.springframework.aop.Advisor;
//import org.springframework.aop.support.DefaultPointcutAdvisor;
//import org.springframework.aop.support.JdkRegexpMethodPointcut;

import com.hanhan.interceptor.RestApiInteceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

//import org.springframework.boot.web.servlet.FilterRegistrationBean;
//import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
//import org.springframework.boot.web.servlet.ServletRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.web.context.request.RequestContextListener;

//import java.util.Arrays;
//import java.util.Properties;

/**
 * web 配置类
 *
 * @author fengshuonan
 * @date 2016年11月12日 下午5:03:32
 *
 *
 *
 * WebMvcConfigurer
 */
@Configuration
public class WebConfig implements WebMvcConfigurer  {

   /* @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedHeaders("*")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowCredentials(true).maxAge(3600*3600);
    }*/
    /**
     * 增加对rest api鉴权的spring mvc拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RestApiInteceptor())
                .addPathPatterns("/jwt/**")
                .addPathPatterns("/jwt")
                .addPathPatterns("/jwt/*")
//                .addPathPatterns("/apilogin")
                ;



    }





















/*
    @Autowired
    private GunsProperties gunsProperties;
*/

    /**
     * 增加swagger的支持
     */
/*    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (gunsProperties.getSwaggerOpen()) {
            registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }*/



    /**
     * 默认错误页面,返回json
     */
  /*  @Bean("error")
    public GunsErrorView error() {
        return new GunsErrorView();
    }
*/
    /**
     * druidServlet注册
     */
   /* @Bean
    public ServletRegistrationBean druidServletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet());
        registration.addUrlMappings("/druid/*");
        return registration;
    }*/

    /**
     * druid监控 配置URI拦截策略
     */
   /* @Bean
    public FilterRegistrationBean druidStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter(
                "exclusions", "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
        //用于session监控页面的用户名显示 需要登录后主动将username注入到session里
        filterRegistrationBean.addInitParameter("principalSessionName", "username");
        return filterRegistrationBean;
    }*/

    /**
     * druid数据库连接池监控
     */
   /* @Bean
    public DruidStatInterceptor druidStatInterceptor() {
        return new DruidStatInterceptor();
    }

    @Bean
    public JdkRegexpMethodPointcut druidStatPointcut() {
        JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
        String patterns = "cn.stylefeng.guns.modular.*.service.*";
        //可以set多个
        druidStatPointcut.setPatterns(patterns);
        return druidStatPointcut;
    }*/

    /**
     * druid数据库连接池监控
     */
   /* @Bean
    public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
        BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
        beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
        beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
        return beanTypeAutoProxyCreator;
    }
*/
    /**
     * druid 为druidStatPointcut添加拦截
     *
     * @return
     */
   /* @Bean
    public Advisor druidStatAdvisor() {
        return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
    }*/

    /**
     * xssFilter注册
     */
    /*@Bean
    public FilterRegistrationBean xssFilterRegistration() {
        XssFilter xssFilter = new XssFilter();
        xssFilter.setUrlExclusion(Arrays.asList("/notice/update", "/notice/add"));
        FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
        registration.addUrlPatterns("/*");
        return registration;
    }*/

    /**
     * RequestContextListener注册
     */
    /*@Bean
    public ServletListenerRegistrationBean requestContextListenerRegistration() {
        return new ServletListenerRegistrationBean<>(new RequestContextListener());
    }*/

    /**
     * ConfigListener注册
     */
  /*  @Bean
    public ServletListenerRegistrationBean configListenerRegistration() {
        return new ServletListenerRegistrationBean<>(new ConfigListener());
    }
*/
    /**
     * 验证码生成相关
     */
   /* @Bean
    public DefaultKaptcha kaptcha() {
        Properties properties = new Properties();
        properties.put("kaptcha.border", "no");
        properties.put("kaptcha.border.color", "105,179,90");
        properties.put("kaptcha.textproducer.font.color", "blue");
        properties.put("kaptcha.image.width", "125");
        properties.put("kaptcha.image.height", "45");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.session.key", "code");
        properties.put("kaptcha.textproducer.char.length", "4");
        properties.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }*/
}

 

 

 

package com.hanhan.utils;

import com.alibaba.fastjson.JSON;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class RenderUtil {
    public RenderUtil() {
    }

    public static void renderJson(HttpServletResponse response, Object jsonObject) {
        try {
//            response.addHeader("Access-Control-Allow-Origin", "*");
//            response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
//            response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
//            response.addHeader("Access-Control-Max-Age", "1800");//30 min
//            response.setContentType("application/json");
//            response.setCharacterEncoding("UTF-8");
            PrintWriter writer = response.getWriter();
            writer.write(JSON.toJSONString(jsonObject));
        } catch (IOException var3) {
            throw new RuntimeException("拦截器返回信息异常");
        }
    }
}

 

 




    
    Title
    





 

 

 

 

 

 

 

 

你可能感兴趣的:(跨域 springboot2.1 拦截器跨域 ajax请求例子)