spring解决跨域的三种方法,spring boot 解决跨域
在的第一篇博文
简介跨域我就不多说了,我们今天开门见山直接解决跨域的几种姿势,那就上姿势
姿势姿势一实现webmvcconfigure # addCorsMappings的方法
导入org。spring框架。语境。注释。配置;导入组织。spring框架。网络。servlet。配置。注释。CORS登记处;导入org。spring框架。网络。servlet。配置。注释。webmvc配置器;@配置公共类CorsConfig实现WebMvcConfigurer { @ Override public void addCorsMappings(CORS注册表注册表){ registry。添加映射(/* * ).allowed origins(“*”)。allowed methods(“GET”,“HEAD”,“POST”,“PUT”,“DELETE”,“OPTIONS”).allowCredentials(true).maxAge(3600).允许的标头(" * ");}}姿势二重新注入科尔斯过滤器
导入org。spring框架。语境。注释。豆;导入org。spring框架。语境。注释。配置;导入org。spring框架。网络。CORS。CORS配置;导入org。spring框架。网络。CORS。urlbasedcorconfigurationsource;导入org。spring框架。网络。过滤器。CORS滤波器;/** * 解决跨域*/@配置公共类CorsFilterConfig {/* * *开启跨域访问拦截器* * @ date 2021/4/29 9:50 */@ Bean公共CORS过滤器CORS过滤器(){//创建克-奥二氏分级量表配置对象后添加配置CORS配置CORS配置=新CORS配置();//设置放行哪些原始域CORS配置。addallowedorigin( * );//放行哪些原始请求头部信息CORS配置。addallowedheader( * );//放行哪些请求方式CORS配置。addallowedmethod(“*”);UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();//2.添加映射路径来源。registercorsconfiguration(/* * ,CORS配置);返回新的科尔斯过滤器(源);}}姿势三创建一个过滤器解决跨域
@ Slf4j @ Component @ web Filter(URL patterns={ /* ,filterName=headerFilter )公共类头过滤器实现Filter { @ Override public void do Filter(servlet request,ServletResponse resp,FilterChain)抛出IOException,servlet exception { http servlet response response=(http servlet response)resp;//解决跨域访问报错回应。set header( Access-Control-Allow-Origin , * );回应。set header( Access-Control-Allow-Methods , POST,PUT,GET,OPTIONS,DELETE );//设置过期时间回应。set header( Access-Control-Max-Age , 3600 );回应。set header( Access-Control-Allow-Headers , Origin,X-Requested-With,Content-Type,Accept,client_id,uuid,Authorization );//支持HTTP 1.1 .回应。set header( Cache-Control , no-cache,no-store,must-revalidate );//支持HTTP 1.0 .response.setHeader(Expires , 0 );response.setHeader(Pragma , no-cache );//编码回应。setcharacterencoding(“UTF-8”);chain.doFilter(request,resp);} @覆盖public void init(filter config filter config){ log。信息(跨域过滤器启动);} @覆盖public void destroy() { log.info(跨域过滤器销毁);}}姿势四使用交叉起源注解
可以使用在单个方法上也可以使用在类上
目标({ElementType .类型,元素类型。方法})@Retention(RetentionPolicy .运行时)@ documented public @ interface cross origin {/* * @从春天5.0开始弃用,取而代之的是{ @ link CORS配置# applyPermitDefaultValues } */@ Deprecated String[]DEFAULT _ ORIGINS={ * };/* * @从春天5.0开始弃用,取而代之的是{ @ link CORS配置# applyPermitDefaultValues } */@ Deprecated String[]DEFAULT _ ALLOWED _ HEADERS={ * };/* * @从春天5.0起弃用,取而代之的是{ @ link CORS配置# applyPermitDefaultValues } */@弃用的boolean DEFAULT _ ALLOW _ CREDENTIALS=false;/* * @从春天5.0起弃用,取而代之的是{ @ link CORS配置# applyPermitDefaultValues } */@弃用long DEFAULT _ MAX _ AGE=1800/* * * * { @ link # origins }的别名. */@ alias for(" origins ")String[]value()default { };/** *允许跨来源请求的来源列表。请*查看{ @ link CORS配置# setAllowedOrigins(List)}了解详细信息. p默认情况下,允许所有原点,除非还设置了{@code originPatterns},在这种情况下,将改为使用{@code originPatterns} .*/@AliasFor(值)String[]origins()默认值{ };/** *替代{@link #origins()},支持通过*通配符模式声明的起源。详情请见* @ link CORS配置# setAllowedOriginPatterns(List)} .* p默认情况下不设置。* @自5.3 */String[]原点模式()默认{ };/** *实际请求中允许的请求标头列表,*可能{@code *}允许所有标头. p允许的标题列在预检请求的{ @ code Access-Control-Allow-header } *响应标题中. p根据克-奥二氏分级量表规范,如果头名称是下列之一,则不需要列出:* {@code Cache-Control}、{@code Content-Language}、{@code Expires}、* {@code Last-Modified}或{@code Pragma}* p默认情况下,允许所有请求的标头. */String[] allowedHeaders()默认值{ };/** *用户代理将允许客户端*访问实际响应的响应头列表,除了"简单"头,即* {@code Cache-Control}、{@code Content-Language}、{@code Content-Type}、* {@code Expires}、{@code Last-Modified}或{@code Pragma}、* p Exposed头在实际克-奥二氏分级量表请求的{ @ code Access-Control-Expose-header } *响应头中列出. p特殊值{@code *}允许为*非凭证请求公开所有标头. p默认情况下,没有标题被列为暴露. String */String[]exposed headers()默认值{ };/** *支持的超文本传送协议请求方法列表. p默认情况下,支持的方法与*控制器方法映射到的方法相同* request method[]方法()默认值{ };/** *浏览器是否应该向带注释的端点发送凭证,例如饼干以及*跨域请求。在*预检请求的{ @代码访问-控制-允许-凭据}响应头中*设置了配置值. p strong注意:/strong请注意,此选项与配置的域建立了高*信任级别,并且通过暴露用户特定的敏感*信息(如饼干和跨站点请求伪造令牌)增加了网应用程序的表面*攻击. p默认情况下未设置此项,在这种情况下,也未设置* { @代码访问-控制-允许-凭据}标头,因此不允许使用*凭据/String allowCredentials()默认值"";/** *预检响应的缓存持续时间的最长期限(秒)。* p此属性控制预检请求的{@code Access-Control-Max-Age} *响应头的值. p将此项设置为合理的值可以减少浏览器所需的预检*请求/响应交互的次数。*负值表示全身长的未定义/em .* p默认设置为{@code 1800}秒(30分钟)。*/long maxAge()默认值-1;以上四种姿势都学会了么?学会了三连哦
可以关注公众号,学习更多的姿势
版权归作者所有:原创作品来自学习java的博主巴度,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。