Java SSM框架中解决跨域请求、内网其它ip访问的四种办法

1 篇文章 0 订阅
1 篇文章 0 订阅

Java SSM框架中解决跨域请求、内网其它ip访问的四种办法

SSM框架推荐使用方法一、方法二,这样简单,一行代码一步骤搞定。
传统Servlet开发只能使用方法三、方法四。
个人博客网站:http://www.hezepeng.com (开发中,预计2019年8月上线)
GitHub:https://github.com/Hezepeng

方法一:最简单的解决方法——注解

SpringMVC 4.2以后支持@CrossOrigin注解。
SpringBoot完全支持。

直接在Controller类或者Request函数前加上@CrossOrigin注解即可允许所有ip跨域访问
加在Controller类上表示该Controller的所有方法都支持跨域
加在Controller中的Request函数上表示仅该函数支持跨域

@CrossOrigin //允许所有ip跨域
@CrossOrigin(origins = "192.169.1.105") //只允许指定ip跨域

在这里插入图片描述
只需要这一个配置就能支持跨域访问。
allowed-origins="*" 就是配置运行哪些地址访问,“*”表示允许所有地址访问,这里也可以换成内网ip之类的。

方法二:在SpringMVC配置文件spring-config.xml中配置跨域

方法二也非常简单,只需一步。

<!-- 接口跨域配置 -->  
<mvc:cors>  
  <mvc:mapping path="/**"  
               allowed-origins="*"  
               allowed-methods="POST, GET, OPTIONS, DELETE, PUT"  
               allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"  
               allow-credentials="true" />  
</mvc:cors>

只需要这一个配置就能支持跨域访问。
allowed-origins="*" 就是配置运行哪些地址访问,“*”表示允许所有地址访问,这里也可以换成内网ip之类的。

方法三:使用cors-filter包配置跨域

其实就是引用这个包里面的写的filter,个人觉得没必要,又要引入包,相比方法四,其实仅仅只省略了一个crosFilter.class文件,还是需要在web.xml里面配置Filter。
##第一步:先引入pom.xml依赖

<dependency> 

   <groupId>com.thetransactioncompany</groupId> 

   <artifactId>cors-filter</artifactId> 

   <version>2.5</version> 

</dependency>

第二步 在web.xml中注册Filter

<!-- 跨域过滤器 -->
<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposedHeaders</param-name>
        <param-value>Set-Cookie</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

搞好以上两步就能支持跨域请求

方法四:自己写CorsFilter

在传统的Servlet开发中,应该都是这样来配置跨域的。

第一步:写CorsFilter类

public class CorsFilter implements Filter {
    private boolean isCross = false;

    @Override
    public void destroy() {
        isCross = false;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (isCross) {
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            HttpServletResponse httpServletResponse = (HttpServletResponse) response;
            System.out.println("拦截请求: " + httpServletRequest.getServletPath());
            httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
            httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
            httpServletResponse.setHeader("Access-Control-Max-Age", "0");
            httpServletResponse.setHeader("Access-Control-Allow-Headers",
                    "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
            httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
            httpServletResponse.setHeader("XDomainRequestAllowed", "1");
        }
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String isCrossStr = filterConfig.getInitParameter("IsCross");
        isCross = isCrossStr.equals("true") ? true : false;
        System.out.println("跨域开启状态:"isCrossStr);
    }
}

第二步:在web.xml中注册CorsFilter

<!-- 跨域请求 -->  
 <filter>  
   <filter-name>CorsFilter</filter-name>  
   <filter-class>com.hezepeng.filter.CorsFilter</filter-class>  
   <init-param>  
       <param-name>IsCross</param-name>  
       <param-value>true</param-value>  
   </init-param>  
</filter>  
<filter-mapping>  
   <filter-name>CorsFilter</filter-name>  
   <url-pattern>/*</url-pattern>  
</filter-mapping>

搞好以上两步就能支持跨域请求。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值