spring - 使用Spring Security插件使用文件扩展名内容协商?

标签 spring grails groovy annotations spring-security

我正在尝试使用最新的spring安全插件进行grails,但是遇到了一些麻烦。

我有一个使用此方法的 Controller :

@Secured(['ROLE_USER'])
def query = {
}

当我点击http://localhost:8080/myApp/myController/query时,我会被提示进行适当的授权。但是,我需要通过文件扩展名进行内容类型协商。使用
grails.mime.file.extensions=true
我可以使用相同的UrlMappings并通过.../myApp/myController/query.js?params=blah进入我的 Controller 方法。 但是,没有提示我进行身份验证,并且请求自动通过还是失败,具体取决于我如何设置grails.plugins.springsecurity.rejectIfNoRule
如何在Spring Security插件中使用文件类型协商?

最佳答案

关闭grails.mime.file.extensions并添加以下过滤器:

class FileExtensionContentNegotiationFilters {
    final static String DEFAULT_FORMAT = "js"
    def filters = {
        all(controller: '*', action: '*') {
            before = {
                addFormatToRequestByFileExtension(request)
            }
            after = {
            }
            afterView = {
            }
        }
    }

    protected addFormatToRequestByFileExtension(def request) {
        String suffix = getSuffixFromPath(request.forwardURI)
        String extension = FilenameUtils.getExtension(suffix)

        if (extension.isEmpty()) {
            request[GrailsApplicationAttributes.CONTENT_FORMAT] = DEFAULT_FORMAT
        }
        else {
            request[GrailsApplicationAttributes.CONTENT_FORMAT] = extension
        }
    }

    protected String getSuffixFromPath(String pathWithoutParams) {
        int lastSlash = pathWithoutParams.lastIndexOf("/")

        if (lastSlash < 0) {
            return ""
        }

        return pathWithoutParams.substring(lastSlash + 1)
    }
}

关于spring - 使用Spring Security插件使用文件扩展名内容协商?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525722/

相关文章:

java - 在 Spring security OAUTH 中定义多个 TokenStore(s)

hibernate - GORM:懒惰地保存

asp.net-mvc - 什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?

java - 在groovy类Spock框架中声明字段单元测试用例

java - Spring MVC @NumberFormat(pattern = "#.###,##") 格式错误的模式

spring - 使用 Spring Boot 框架对基于 Spring JPA 的 DAO 进行分层的正确方法

java - Spring : Need for the contextConfigLocation?

java - 如何从 Fitbit Oauth 身份验证获取数据

grails - Grails Spring Security批注问题

java - 无法将 Groovy 代码编译成 java 类文件