我正在尝试使用最新的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) 
    } 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!