spring-security 检查用户是否登录到Grails Spring Security的最佳方法是什么?

gt0wga4j  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(168)

我想检查用户是否登录。我已经在大多数项目中集成了拦截器来检查用户是否登录。但这并不适用于 AJAX 请求,并且在拦截器中匹配所有控制器会导致过滤器应用于所有控制器,包括/static/,在这种情况下,我将不得不排除(.excludes(uri:“/static/”))。这是正确和标准的做法吗?

LoginInterceptor() {
        matchAll()
                .excludes(controller: "login") 
                .excludes(controller: "signUp") 
                .excludes(uri: "/static/**")
                .excludes(uri: "/assets/**")
    }
    boolean before() {
        if (!springSecurityService.isLoggedIn()) {
            flash.message="You need to login to access furthur pages"
            redirect( controller: 'login',action: 'auth');
            return false
        }
        true
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }

上面的代码不能处理 AJAX 请求。我如何做一个通用的拦截器,它能很好地处理AJAX和WEB请求?这是一个标准的方法来监控登录请求吗?

w46czmvw

w46czmvw1#

如果您使用Spring安全插件。您可以通过配置安全配置来实现。您可以在此处找到更多信息
对于 AJAX 请求,您可以检查返回代码,如果返回代码== 403,则可以将用户重定向到登录页面。

k5hmc34c

k5hmc34c2#

在我的项目中工作时,我发现了以下检查登录状态的方法。

def springSecurityService

boolean canEdit() {
   boolean isLoggedIn = springSecurityService.isLoggedIn()
   if (!isLoggedIn) { return false }
      boolean hasAdminOrCuratorRole = userService.isLoggedInUserACurator() || userService.isLoggedInUserAAdmin()
   hasAdminOrCuratorRole
}

希望这对你有帮助!

相关问题