springboot shiro 配置跨域
时间: 2023-07-09 08:40:50 浏览: 170
在 Spring Boot 和 Shiro 中,可以通过自定义过滤器来解决跨域问题。具体步骤如下:
1. 创建自定义跨域过滤器
创建一个类,继承 org.apache.shiro.web.filter.authc.FormAuthenticationFilter,实现 doFilterInternal 方法。代码如下:
```java
public class CorsAuthenticationFilter extends FormAuthenticationFilter {
@Override
protected void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
// 允许跨域访问的域名
String[] allowedOrigins = {"http://localhost:8080"};
// 允许的请求类型
String allowedMethods = "GET,POST,PUT,DELETE,OPTIONS";
// 允许的头信息
String allowedHeaders = "Content-Type, Authorization";
httpServletResponse.setHeader("Access-Control-Allow-Origin", String.join(",", allowedOrigins));
httpServletResponse.setHeader("Access-Control-Allow-Methods", allowedMethods);
httpServletResponse.setHeader("Access-Control-Allow-Headers", allowedHeaders);
// 如果是预检请求,直接返回成功
if (httpServletRequest.getMethod().equalsIgnoreCase("OPTIONS")) {
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
return;
}
super.doFilterInternal(request, response, chain);
}
}
```
这里的 allowedOrigins 配置是允许的跨域地址,allowedMethods 配置是允许的 HTTP 方法,allowedHeaders 配置是允许的 HTTP 头信息。如果收到的请求是预检请求,直接返回成功即可。
2. 在 Shiro 配置中添加自定义过滤器
在 Shiro 的配置文件中添加自定义过滤器。例如:
```java
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
// ...
Map<String, Filter> filters = new LinkedHashMap<>();
filters.put("corsAuthenticationFilter", new CorsAuthenticationFilter());
filterFactoryBean.setFilters(filters);
// ...
return filterFactoryBean;
}
```
这里将自定义过滤器 CorsAuthenticationFilter 添加到了 Shiro 的过滤器链中。
3. 配置 Spring Boot 的跨域设置
在 Spring Boot 的配置文件中添加 CORS 的配置,跟上面的一样。
这样配置完后,就可以跨域访问 Shiro 中的接口了。
阅读全文