【发布时间】:2012-01-14 08:11:54
【问题描述】:
我正在构建一个使用 Spring Security Core Plugin 的 Grails 应用程序。
我有两个应用程序角色。 ROLE_USER 和 ROLE_ADMIN
用户可以上传存储在名为files
的目录中的文件- 外部用户不应看到任何文件
- ROLE_ADMIN 用户可以看到每个上传的文件。
- ROLE_USER 用户应仅在某些情况下允许使用
文件 url 请求应如下所示
http://localhost:8080/MyApp/files/patient1-1.png
对于第一种情况,我在 conf/Config.groovy 中设置了下一个 url 拦截器
grails.plugins.springsecurity.interceptUrlMap = [
'/files/**': ['ROLE_USER']
]
对于第二种和第三种情况,我创建了下一个文件 conf/MyFilters
class MyFilters {
def springSecurityService
public currentUser() { return User.get(springSecurityService.principal.id);}
public userRoles() { return springSecurityService.principal.authorities*.authority }
def filters = {
fileFilter(uri: '/files/*') {
before = {
println "Here"
def String url = request.getRequestURL()
if(url.contains("files/patient")) {
if(!userRoles().contains(Role.ROLE_ADMIN)) {
if(PLAIN ROLE USER IS NOT ALLOWED) {
redirect(action:'login')
return false;
}
}
}
}
after = {
}
afterView = {
}
}
}
}
但是,它似乎没有被触发。我从来没有看到 Here 打印出来。
知道我做错了什么吗?
【问题讨论】:
-
您是否尝试在过滤器 url 匹配规则中使用 /files/**?当您激活所有网址的过滤器时会发生什么,您能看到您的打印信息吗?