最近在做一个后台用Spring boot、Shiro、Mybatis plus 前台用React的项目.前端调完登录接口后。在调后台接口的时候需要在浏览器中的headers头中添加token的值,后台有一个过滤器,获取到headers中的token并去验证token是否在有效期内,在进行其他操作,在这个过程中,shiro的过滤器中一直接收不到token和值,并且前端会报跨域问题。
之前在写的时候一直用的postman测试,也没有遇到问题,其实是因为Postman本身就没有跨域问题。前后端联调时就遇到了这个问题。
主要原因是CROS在发送复复杂请求时会先发一个不带数据的Option请求,而后端因为有Shiro的存在,在检测到请求头中没有携带Token数据后就不放行了
解决办法
package com.active.config;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* @author 沈洋 邮箱:1845973183@qq.com
* @create 02-06-2021-11:33
**/
public class ShiroHeaderFilter extends FormAuthenticationFilter {
//解决OPTIONS请求跨域问题
@Override
protected boolean isAccessAllowed(ServletRequest request,