fix: 跨域放行准则

This commit is contained in:
筱锋xiao_lfeng 2024-01-19 21:55:26 +08:00
parent ae24df4741
commit c49c96290a
No known key found for this signature in database
GPG Key ID: F693AA12AABBFA87
5 changed files with 50 additions and 11 deletions

View File

@ -0,0 +1,34 @@
package com.jsl.oa.config.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
@Component
public class CorsFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
// 请求头处理
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
// 允许跨域请求
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
try {
chain.doFilter(request, response);
} catch (Exception e) {
log.error("CORS过滤器放行异常", e);
}
}
public void init(FilterConfig filterConfig) {}
public void destroy() {
Filter.super.destroy();
}
}

View File

@ -1,4 +1,4 @@
package com.jsl.oa.config; package com.jsl.oa.config.filter;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jsl.oa.utils.ErrorCode; import com.jsl.oa.utils.ErrorCode;
@ -7,10 +7,12 @@ import com.jsl.oa.utils.ResultUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.ExpiredCredentialsException; import org.apache.shiro.authc.ExpiredCredentialsException;
import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* <h1>JWT过滤器</h1> * <h1>JWT过滤器</h1>
@ -22,6 +24,7 @@ import javax.servlet.http.HttpServletRequest;
* @since v1.1.0 * @since v1.1.0
*/ */
@Slf4j @Slf4j
@Component
public class JwtFilter extends BasicHttpAuthenticationFilter { public class JwtFilter extends BasicHttpAuthenticationFilter {
/** /**
@ -61,6 +64,10 @@ public class JwtFilter extends BasicHttpAuthenticationFilter {
*/ */
@Override @Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
// 添加跨域禁止
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
// 程序执行
try { try {
// 尝试获取Authorization Header // 尝试获取Authorization Header
String token = getAuthzHeader(request); String token = getAuthzHeader(request);

View File

@ -1,7 +1,5 @@
package com.jsl.oa.config.shiro; package com.jsl.oa.config.shiro;
import com.jsl.oa.services.UserService;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.AuthenticationToken;
@ -10,11 +8,8 @@ import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.PrincipalCollection;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@RequiredArgsConstructor
public class MyRealm extends AuthorizingRealm { public class MyRealm extends AuthorizingRealm {
private final UserService userService;
/** /**
* 授权 * 授权
* *

View File

@ -1,6 +1,7 @@
package com.jsl.oa.config.shiro; package com.jsl.oa.config.shiro;
import com.jsl.oa.config.JwtFilter; import com.jsl.oa.config.filter.CorsFilter;
import com.jsl.oa.config.filter.JwtFilter;
import com.jsl.oa.services.UserService; import com.jsl.oa.services.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
@ -29,7 +30,7 @@ public class ShiroConfiguration {
filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问 filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问
filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问 filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问
filterChainDefinitionMap.put("/info/header-image/get", "anon"); // 信息接口允许匿名访问 filterChainDefinitionMap.put("/info/header-image/get", "anon"); // 信息接口允许匿名访问
filterChainDefinitionMap.put("/**/**", "jwt"); // 其他接口一律拦截(需要Token) filterChainDefinitionMap.put("/**/**", "authc"); // 其他接口一律拦截(需要Token)
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
@ -38,7 +39,8 @@ public class ShiroConfiguration {
// 添加JWT过滤器 // 添加JWT过滤器
Map<String, Filter> filters = new LinkedHashMap<>(); Map<String, Filter> filters = new LinkedHashMap<>();
filters.put("jwt", new JwtFilter()); // 配置自定义的JWT过滤器 filters.put("authc", new JwtFilter()); // 配置自定义的JWT过滤器
filters.put("anon", new CorsFilter()); // 配置自定义的CORS过滤器
shiroFilterFactoryBean.setFilters(filters); shiroFilterFactoryBean.setFilters(filters);
return shiroFilterFactoryBean; return shiroFilterFactoryBean;
} }
@ -52,6 +54,6 @@ public class ShiroConfiguration {
@Bean @Bean
public MyRealm myRealm() { public MyRealm myRealm() {
return new MyRealm(userService); return new MyRealm();
} }
} }

View File

@ -1,6 +1,7 @@
package com.jsl.oa.utils; package com.jsl.oa.utils;
import com.jsl.oa.common.constant.SafeConstants; import com.jsl.oa.common.constant.SafeConstants;
import com.jsl.oa.config.filter.JwtFilter;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
@ -19,7 +20,7 @@ import java.util.regex.Pattern;
* *
* @author 筱锋xiao_lfeng * @author 筱锋xiao_lfeng
* @version v1.1.0 * @version v1.1.0
* @see com.jsl.oa.config.JwtFilter * @see JwtFilter
* @since v1.1.0 * @since v1.1.0
*/ */
@Slf4j @Slf4j