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