首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用Spring Security保护Grails中的流步骤

无法使用Spring Security保护Grails中的流步骤
EN

Stack Overflow用户
提问于 2014-01-22 08:19:54
回答 3查看 593关注 0票数 2

我使用的是Grails 2.2.2、SpringRC2 2.0.0和WebFlow -Security-Core2.0-RC2插件。我想确保流程中的最后一步,但一直无法完成。

代码语言:javascript
运行
复制
grails.plugin.springsecurity.interceptUrlMap = [
  '/myController/connect?execution=e*s3': ["isFullyAuthenticated()"]
]

当用户尝试转到流程的最后一步时,如果他们没有完全通过身份验证,我希望将他们重定向到登录页面。这适用于我项目中的其他操作,但不适用于webflows。

我发现一些文档表明Spring Web Flows和Spring Security可以一起使用:http://docs.spring.io/spring-webflow/docs/2.0.x/reference/html/ch07s04.html

有什么想法吗?这在Grails中是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2014-01-22 09:36:08

在安全检查之前,querystring会从url中剥离,所以我认为你需要自己显式地做这个检查。

SecurityExpressionRootisFullyAuthenticated()的实现是

代码语言:javascript
运行
复制
public final boolean isFullyAuthenticated() {
    return !trustResolver.isAnonymous(authentication) && !trustResolver.isRememberMe(authentication);
}

因此,您可以依赖注入authenticationTrustResolver bean并执行相同的检查,例如

代码语言:javascript
运行
复制
class MyController {
   def authenticationTrustResolver
   def springSecurityService

   def action() {

      if (params.execution == 'e*s3' && !isFullyAuthenticated()) {
         response.sendError 401
         return
      }

      ...
   }

   private boolean isFullyAuthenticated() {
      def authentication = springSecurityService.authentication
      !authenticationTrustResolver.isAnonymous(authentication) && !authenticationTrustResolver.isRememberMe(authentication)
   }
}
票数 2
EN

Stack Overflow用户

发布于 2014-01-25 01:52:12

或者,您可以这样做:

代码语言:javascript
运行
复制
grails.plugin.springsecurity.interceptUrlMap = [
  '/myController/connect': ["(request.getParameter('execute')?:'').matches('^e.*?s3\$') ? fullyAuthenticated : permitAll"]
]

这个想法是为表达式公开HttpServletRequest,这样我们就可以决定是返回fullyAuthenticated还是permitAll。

票数 2
EN

Stack Overflow用户

发布于 2014-01-30 01:44:57

难道你不能直接导入这个类并为你的用户添加这个带有匹配角色的注释到你的step的方法中吗?

代码语言:javascript
运行
复制
import grails.plugins.springsecurity.Secured

class MyClass() {

    @Secured(['ROLE_USER'])
    def lastStep() {
        // do things
    }

}

未通过身份验证的用户将重定向到登录页面

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21271823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档