WEB开发网
开发学院软件开发Java 精通 Grails: 身份验证和授权 阅读

精通 Grails: 身份验证和授权

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: auth 方法将执行检查,查看某个 User 是否在会话中,精通 Grails: 身份验证和授权(6),如果不在的话,它将重定向到登录屏幕并返回 false,例如,任何已登录的 User(不仅仅是初始创建者)都可以编辑任何 Entry,阻塞初始的闭包调用, 在 beforeInterceptor

auth 方法将执行检查,查看某个 User 是否在会话中。如果不在的话,它将重定向到登录屏幕并返回 false,阻塞初始的闭包调用。

在 beforeInterceptor 调用每个闭包之前,auth 方法将得到调用。该操作使用 Groovy 标记来指向 this 类的 auth 方法,该方法使用了 ampersand(&)字符。except 列表包含了应当从 auth 调用中移除的闭包。如果希望拦截一些闭包调用,可以使用 only 替换 except。

重新启动 Grails 并测试 beforeInterceptor。尝试在未登录的情况下访问 http://localhost:9090/blogito/entry/create。您应当被重定向到登录屏幕。以 jsmith 身份登录并重新尝试。这一次您应当能够成功创建新的 Entry。

细粒度授权

beforeInterceptor 提供的粗粒度授权仅仅是个开始,但是也可以向单独的闭包添加授权钩子。例如,任何已登录的 User(不仅仅是初始创建者)都可以编辑任何 Entry。可以关闭安全漏洞:将 4 行良好布置的代码添加到 EntryController.groovy 中的 edit 闭包中,如清单 8 所示:


清单 8. 向 edit 闭包添加授权
def edit = { 
  def entryInstance = Entry.get( params.id ) 
   
  //limit editing to the original author 
  if( !(session.user.login == entryInstance.author.login) ){ 
   flash.message = "Sorry, you can only edit your own entries." 
   redirect(action:list) 
  } 
 
  if(!entryInstance) { 
    flash.message = "Entry not found with id ${params.id}" 
    redirect(action:list) 
  } 
  else { 
    return [ entryInstance : entryInstance ] 
  } 
} 

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:精通 Grails 身份

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接