在基于grails 2.4.4的新项目中,我使用带反转选项的过滤器模式。通过反转规则,过滤器中排除了很少的控制器和来自其他控制器的一些操作。
过滤器不会应用于Login,ForgotPassword和ServerError控制器以及saveUser,来自不同用户控制器的verifyRegistration操作。此过滤器架构无法按预期工作。
当我在登录控制器中调用登录api时,过滤器正在执行并抛出异常。
package com.project.filters
import grails.converters.JSON
class MyProjectAuthorizationFilters {
def userService
def grailsApplication
def filters = {
checkXAuthToken(controller:'login|forgotPassword|serverError', action:'saveUser|verifyRegistration', invert: true) {
before = {
try{
String tokenValue = request.getHeader('X-Auth-Token')
if(tokenValue == null && tokenValue == ""){
throw new MyCustomException(401, "Please provide X-Auth-Token in Header")
}
userService.getUserByAuthToken(tokenValue)
}catch (MyCustomException error) {
error.stackTrace = ""
response.setStatus(error.status)
render error as JSON
return false
}
}
}
}
}
我知道我们也可以使用controllerExclude,actionExclude,但不知道为什么会破坏它?
修改 我甚至尝试过使用controllerExclude和actionExclude,但它并没有按预期工作。这是一种令人厌恶的行为,还是我做错了什么。发布整个过滤器类代码。
感谢。