我需要在调用控制器中的每个def之前执行一个函数(在每个新请求发送到服务器之前)。在这个功能我会 1)进行会话检查是否有效将请求转发给相应的操作&控制器与params 2)对用户提交的参数进行消毒检查
我知道每个控制器拦截器,我怎样才能编写一个全局公共拦截器。
我如何以及在哪里可以在grails中调用此函数? 提前谢谢..
答案 0 :(得分:6)
您可以在Controller中使用beforeInterceptor以实现完全相同的目的。把它放到一个新的控制器说BaseController并输入你想要做的所有东西,然后使用BaseController扩展所有现有的控制器,你就可以开始了。有关beforeInterceptor Click here
的更多信息注意:如果您已经有一些由所有其他控制器扩展的通用控制器,则无需实现新控制器。只需在该控制器本身中实现beforeInterceptor。
或者,您可以实施过滤器并在该过滤器中执行所有操作。有关Grails Click Here
中过滤器的更多信息答案 1 :(得分:4)
您可以按以下方式添加过滤器以拦截每个操作
class AbcFilters {
def filters = {
abc1(controller: '*', action: '*') {
}
abc2(controller: '*Test', action: '*') {
}
abc2(controllerExclude: 'AppStartup*', action: '*') {
}
}
}
答案 2 :(得分:3)
以下是每个控制器中每个操作的过滤器:
all(controller: '*', action: '*') {
before = {
}
after = {
}
afterView = {
}
}
这是一个使用spring security的会话检查过滤器:
auditEntry(controller:'*', action:'*') {
before = {
if (session.isNew()){
def userName
def principal = SCH?.context?.authentication?.principal
if (principal instanceof String){
userName = principal
log.info "Anonymous user has logged into the application."
}else{
userName = principal?.username
log.info "User $userName has logged into the application."
log.debug (principal)
}
}
}
}