JWT拦截接口后台Springboot处理涉及跨域问题干货

本文介绍了JWT的概念,包括其组成:头信息、消息体和签名。讨论了JWT适合一次性命令认证的情况,并与session和cookie进行了对比。接着,文章重点讲述了在Springboot后台处理跨域问题的干货,包括导入依赖、JWTFilter过滤器和JWTProvider生成器的使用,以及应用配置和Controller接口的设置。
jwt概念:

JSON WEB Token(JWT,读作 [/dʒɒt/]),是一种基于JSON的、用于在网络上声明某种主张的令牌(token)。JWT通常由三部分组成: 头信息(header), 消息体(payload)和签名(signature)。

JWT适合一次性的命令认证,颁发一个有效期极短的JWT,即使暴露了危险也很小,由于每次操作都会生成新的JWT,因此也没必要保存JWT,真正实现无状态。

传统web场景使用session或者cookie会更好。

通常情况下感觉代码没问题前后台却交互不成功,很有可能跨域有问题

后台干货

首先导入依赖在pom.xml中

 <!--添加jwt依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>

其次使用jwt生成token与解析token只需要俩个类
JWTFilter 过滤器
JWTProvider 生成器

import main.com.baosight.exception.UserException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * java类简单作用描述
 *
 * @ProjectName: NoteBookMaven
 * @Description: java类作用描述
 * @CreateDate: 2018/12/4 9:18
 * @UpdateUser: lucas
 * @Version: 1.0
 */

//拦截/api下的所有接口
@WebFilter(filterName = "loginFilter",urlPatterns = "/api/*")
public class JWTFilter implements Filter {

    @Autowired
    private JWTProvider jwtProvider;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, Servlet
Spring Boot整合JWT时,处理问题可以采用以下几种方法: 1. 使用CORS(源资源共享)配置:在Spring Boot中,可以通过添加CORS配置来允许特定的源访问API。可以在`WebMvcConfigurer`配置类中添加`addCorsMappings`方法来实现。例如,允许所有源访问API可以使用以下配置: ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*") .allowCredentials(true); } } ``` 2. 使用Spring Security配置:如果你使用了Spring Security来保护API,并且已经配置了JWT认证,可以在`WebSecurityConfigurerAdapter`配置类中添加配置。例如: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors().and().csrf().disable() // 其他配置... } } ``` 3. 使用过滤器处理请求:可以创建一个自定义的过滤器来处理请求。该过滤器可以在请求到达控制器之前添加相关的响应头。例如: ```java @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Headers", "authorization, content-type"); response.setHeader("Access-Control-Max-Age", "3600"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } // 其他方法... } ``` 这些方法可以根据你的具体需求选择使用。通过配置CORS或Spring Security,或使用自定义过滤器,可以解决Spring Boot整合JWT时的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值