grails - 使用 grails 过滤器保护 grails 旋律

标签 grails spring-security

我有一个应用程序,我在其中使用 Spring Security 和 grails 旋律。我计划在生产环境中运行 grails melody,但不希望访问者访问它。我应该如何做到这一点?我尝试在 grails 中创建过滤器(仅显示我正在尝试的示例,而不是实际代码)-

def filters = {
    allURIs(uri:'/**') {
        before = {
            //...
            if(request.forwardURI.indexOf("admin") != -1 ||
        request.forwardURI.indexOf("monitoring") != -1) {
                response.sendError 404
                return false 
            }
        }
    }
}

但这不起作用,因为“监视”请求没有命中此过滤器。我什至不希望用户知道这样的 URL 存在,所以我想检查过滤器,如果“监控”是 URL,我会显示 404 错误页面。这也是我不想用 spring 安全保护这个 URL 的原因,因为它会显示“访问被拒绝”页面。

基本上我希望 URL 存在,但它们应该对用户不可见。我希望仅对这些特殊 URL 的某些 IP 地址开放访问权限。

另一方面,是否可以编写一个 grails 过滤器,在 spring 安全过滤器被击中之前“起作用”?我希望能够在将请求转发到 Spring Security 之前进行一些过滤。像上面那样编写 grails 过滤器没有帮助。如果我访问 protected 资源并且没有调用此过滤器,则首先命中 Spring 安全过滤器。

谢谢

最佳答案

Grails 过滤器是 Spring Interceptor 的包装器,因此它们在“真正的”servlet 过滤器之后触发,例如 Spring Security 使用的过滤器。如果你想在 Spring Security 之前触发一些东西,你需要在 web.xml 中注册一个过滤器,或者可能在插件的过滤器链中。

这是 IP 地址过滤器的动机之一。我们想要一个可供登录管理员使用的管理部分,但也只能在从 LAN 或 VPN 访问时使用。 LAN 和 VPN IP 地址都以 10 开头。所以我们添加了一个规则

'/admin/**': '10.**'

过滤器发送 404 响应以隐藏资源的存在。

http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/10.%20Extending%20and%20configuring%20the%20plugin.html#10.8.%20IP%20Address%20Restrictions对于这方面的文档。

关于grails - 使用 grails 过滤器保护 grails 旋律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953855/

相关文章:

json - 如何实现推送通知?

grails - 过滤 'belongsTo'结果

hibernate - Grails/Hibernate不会在MySQL Linux上自动创建表

java - 如何仅针对/执行器/健康禁用安全性?

java - Spring MVC - 如果未登录,如何重定向到登录

java - Grails dbm-update失败:MySQLSyntaxErrorException:SQL语法有错误

mysql - 俄语字符被存储为 ????在 mysql 中,在 grails 应用程序中

Spring安全标签库

Grails Spring Security 通过 id 获取用户

java - JSESSION/HTTPSession 与应用程序制作的 session ID