如何使用Grails Spring Security Plugin在访问操作之前要求登录?

时间:2011-01-18 03:46:06

标签: grails spring-security grails-plugin

我知道我可以使用注释或请求映射来限制某些特定ROLES对ACTION的访问。但现在我有不同的情况。

我的方案是:我网站的每个用户都可以创建帖子,他们可以自己发布公开,私有或仅与其他用户分享。我通过数据库表PERMISSION实现共享帖子,该表指定用户是否有权查看帖子。

此处出现的问题是,当客户通过直接链接访问帖子时,如何确定他/她是否有权查看该帖子?有三种情况:

  
      
  1. 这个帖子是公开的,所以任何人都可以查看(包括不登录   用户)
  2.   
  3. 该帖子是私有的,因此只有登录所有者才能查看
  4.   
  5. 帖子是共享,只表示共享的登录用户和   所有者可以查看它。
  6.   

我想这样处理:

  
      
  1. 如果要求的帖子是公开的:好的。
  2.   
  3. 如果请求的帖子是私人/共享:我想重定向   客户到登录页面;后   登录后,用户将重新定向   到他想看的页面。
  4.   

这里的问题是我可以将用户重定向到登录控制器/ auth操作,但之后我不知道如何重定向它。每个帖子的链接因post_id而异,因此我无法使用SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl

有人知道这样做的方法吗?

4 个答案:

答案 0 :(得分:1)

关于grails的Dunno,但spring security有一个spring-security-redirect参数,可用于在成功验证时将用户重定向到指定的URL。

答案 1 :(得分:1)

我认为您可以添加自己的过滤器,该过滤器将在调用操作之前执行,并在那里验证帖子权限。您可以找到有关Grails Filters here的更多信息。

答案 2 :(得分:1)

你看过Grails Spring Security ACL插件吗?我不太了解它,但它旨在限制对特定实例的访问:

http://grails.org/plugin/spring-security-acl

答案 3 :(得分:0)

我找到了解决此问题的快速解决方法:

  1. 如果用户已登录:请检查用户的权限,并返回相应的结果。
  2. 如果用户未登录:在查看操作时,请按以下方式设置post_id:

    session.post_id = 8

  3. 将用户重定向到Login Controller / Auth操作。

  4. 在checkrole操作(在Config.groovy中为grails.plugins.springsecurity.successHandler.defaultTargetUrl)时,如果session.post_id存在,请使用它来构建重定向到视图操作的链接。在重定向之前,请清除session.post_id。