欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

grails3 通过拦截器配置跨域访问限制

程序员文章站 2022-05-10 13:06:48
...

通过设置header来实现的跨域访问。

 

app1为数据提供者

app2为数据调用者

 

app1中添加Api控制器和Api拦截器(Api 随便起的名字,控制器名和拦截器名称要相同,并且要放在同一个包下,拦截自动生效)

目录结构:

grails3 通过拦截器配置跨域访问限制
            
    
    博客分类: grails grails3ajax跨域拦截器 

 

控制器:

class ApiController {

    def index() { }

    def aa(){
        println "request.remoteAddr:==="+request.remoteAddr
        println "request.remoteHost:==="+request.remoteHost
        println "request.remoteUser:==="+request.remoteUser
        println "request.remotePort:==="+request.remotePort
        println "params:"+params
        def res = [flag:true,status:200,params:params]
        respond res
    }
}

 

 

拦截器:

class ApiInterceptor {

    boolean before() {
        println "before::::=================="+params
        header( "Access-Control-Allow-Origin","*")// 这里的*注意一下允许所有人调用"http://local.test" )
        header( "Access-Control-Allow-Credentials", "true" )
        header( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE" )
        header( "Access-Control-Max-Age", "3600" )
        return true//这里返回true 随后会进入控制器中调用方法,返回false 不进入控制器,直接返回
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}

 

 

app2中建一个gsp页面调用:

<!DOCTYPE html>
<html>
<head>
    <asset:javascript src="jquery-2.2.0.min.js"/>
    <script>
        $(function(){
            $("#btn1").click(function(){
                $('#test').load('http://app1.tch.com:8080/Api/aa.json?name='+$("#name").val());
            });
        });
    </script>
</head>
<body>
<h3 id="test">请点击下面的按钮,通过 jQuery AJAX 改变这段文本。</h3>
name:<input id="name" value="sss"/>
<button id="btn1" type="button">get获得外部的内容</button>
<hr/>
</body>
</html>

 

页面调用结果:

grails3 通过拦截器配置跨域访问限制
            
    
    博客分类: grails grails3ajax跨域拦截器 

 

不建议在页面调用,这种方式相当于将数据暴露给全世界。最好加上认证。