继承HandlerInterceptorAdapter
import org
.springframework
.web
.servlet
.handler
.HandlerInterceptorAdapter
;
import org
.springframework
.web
.util
.WebUtils
;
import javax
.servlet
.ServletRequest
;
import javax
.servlet
.ServletResponse
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
private SysUserTokenService sysUserTokenService
;
public AuthorizationInterceptor(SysUserTokenService sysUserTokenService
) {
this.sysUserTokenService
= sysUserTokenService
;
}
public static final String USER_KEY
= "userId";
@Override
public boolean preHandle(HttpServletRequest request
, HttpServletResponse response
, Object handler
) throws Exception
{
if (**request
.getMethod().equals(RequestMethod
.*
*OPTIONS
**.name())**) {
response
.setHeader("Access-control-Allow-Origin", request
.getHeader("Origin"));
response
.setHeader("Access-Control-Allow-Methods", request
.getMethod());
response
.setHeader("Access-Control-Allow-Headers", request
.getHeader("Access-Control-Request-Headers"));
response
.setStatus(HttpStatus
.OK
.value());
return false;
}
return true;
}
}`
import org
.springframework
.web
.servlet
.config
.annotation
.WebMvcConfigurer
;
import org
.springframework
.web
.servlet
.config
.annotation
.WebMvcConfigurerAdapter
;
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public WebMvcConfigurer
corsConfigurer()
{
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry
) {
registry
.addMapping("/**").
allowedOrigins("*").
allowedMethods("*"). //允许任何方法(post、get等)
allowedHeaders("*"). //允许任何请求头
allowCredentials(true). //带上cookie信息
exposedHeaders(HttpHeaders
.SET_COOKIE
).maxAge(3600L
); //maxAge(3600)表明在
3600秒内,不需要再发送预检验请求,可以缓存该结果
}
};
}
@Override
public void addInterceptors(InterceptorRegistry registry
) {
// 可添加多个
registry
.addInterceptor(new AuthorizationInterceptor(sysUserTokenService
)).addPathPatterns("/**");
}
}
#### Filter
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req
, ServletResponse res
, FilterChain chain
) throws IOException
, ServletException
{
HttpServletResponse httpResponse
= (HttpServletResponse
) res
;
HttpServletRequest httpRequest
= (HttpServletRequest
) req
;
httpResponse
.setHeader("Access-Control-Allow-Origin", httpRequest
.getHeader("Origin"));
httpResponse
.setHeader("Access-Control-Allow-Methods", httpRequest
.getMethod());
httpResponse
.setHeader("Access-Control-Max-Age", "3600");
httpResponse
.setHeader("Access-Control-Allow-Headers", httpRequest
.getHeader("Access-Control-Request-Headers"));
chain
.doFilter(httpRequest
, httpResponse
);
}
@Override
public void init(FilterConfig filterConfig
) {
}
@Override
public void destroy() {
}
}
实现WebMvcConfigurer
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public WebMvcConfigurer
corsConfigurer()
{
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry
) {
registry
.addMapping("/**").
allowedOrigins("*").
allowedMethods("*"). //允许任何方法(post、get等)
allowedHeaders("*"). //允许任何请求头
allowCredentials(true). //带上cookie信息
exposedHeaders(HttpHeaders
.SET_COOKIE
).maxAge(3600L
); //maxAge(3600)表明在
3600秒内,不需要再发送预检验请求,可以缓存该结果
}
};
}
@Override
public void addInterceptors(InterceptorRegistry registry
) {
// 可添加多个
registry
.addInterceptor(new AuthorizationInterceptor(sysUserTokenService
)).addPathPatterns("/**");
}
}
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
private SysUserTokenService sysUserTokenService
;
public AuthorizationInterceptor(SysUserTokenService sysUserTokenService
) {
this.sysUserTokenService
= sysUserTokenService
;
}
public static final String USER_KEY
= "userId";
@Override
public boolean preHandle(HttpServletRequest request
, HttpServletResponse response
, Object handler
) throws Exception
{
if (**request
.getMethod().equals(RequestMethod
.*
*OPTIONS
**.name())**) {
response
.setHeader("Access-control-Allow-Origin", request
.getHeader("Origin"));
response
.setHeader("Access-Control-Allow-Methods", request
.getMethod());
response
.setHeader("Access-Control-Allow-Headers", request
.getHeader("Access-Control-Request-Headers"));
response
.setStatus(HttpStatus
.OK
.value());
return false;
}
return true;
}
}