Grails安全实施

时间:2016-08-20 13:32:58

标签: grails

我制作了以下控制器。 我可以登录和注销,但是如何强制用户先登录? 我需要在登录时启动会话并在注销时终止它。

class UserController {
   def scaffold = User
   def login = {}
   def authenticate = {
      def user = User.findByLoginAndPassword(params.login, params.password)
      if(user){
         session.user = user
         flash.message = "Hello ${user.name}!"
         redirect(controller:"entry", action:"list")      
      } else {
         flash.message = "Sorry, ${params.login}. Please try again."
         redirect(action:"login")
      }
   }

   def logout = {
      flash.message = "Goodbye ${session.user.name}"
      session.user = null
      redirect(controller:"entry", action:"list")      
   }  
}

2 个答案:

答案 0 :(得分:1)

选择1:

有许多安全插件可用于保护您的Grail应用程序。

最受欢迎的是" Spring Security Core Plugin" ,它将强制用户在访问您的安全资源之前登录。

参考链接:http://grails.org/plugin/spring-security-core

选择2:

但如果您不想为您的应用程序使用任何外部插件(我建议使用一个),您可以利用Grail&中的"过滤器" #39; S

您可以在用户点击控制器的任何操作之前创建一个用于检查会话的过滤器,如果会话已经过期/未创建,那么您可以将它们重定向到登录页面。

示例:

class SecurityFilterFilters {

    def filters = {
        loginCheck(controller: 'Your_controller_name(if many separate them with pipe(|) )', action: "*") {
            before = {
                //check if user is logged in(if yes then there will be session.user) and action is not login action 
                if (!session.user && !actionName.equals('login')) {
                    //user is not logged in so redirect him to login page
                    redirect(controller: 'user', action: 'login')
                    return false
                }
            }
        }
    }
}

参考链接: http://docs.grails.org/2.2.1/ref/Plug-ins/filters.html

答案 1 :(得分:0)

查看“安全注释”' Grails的spring-security-core插件文档

https://grails-plugins.github.io/grails-spring-security-core/v3/