不属于gsp的适用范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不属于gsp的适用范围相关的知识,希望对你有一定的参考价值。

参考技术A 题主是否想询问“gsp的适用范围是什么”?中国境内经营药品的专营或者兼营企业。GSP是英文GoodSupplyPractice的缩写,意即产品供应规范,是规范药品经营质量管理的基本准则,其适用范围是中华人民共和国境内经营药品的专营或者兼营企业,可用于药品流通过程中,计划采购、购进验收等环节。

Grails Spring Security 插件和 GSP 标签不起作用

【中文标题】Grails Spring Security 插件和 GSP 标签不起作用【英文标题】:Grails Spring Security plugin and GSP tags not working 【发布时间】:2016-10-15 14:02:45 【问题描述】:

我是 Grails 的新手,所以可能我做错了什么,但也许你可以帮我弄清楚。所以我有这个简单的 Grails 应用程序,我认为 Spring Security 插件运行良好。问题是,在 GSP 页面上 Spring Security 标签没有显示我期望的信息,示例场景:

    我有 /basket/placeOrder 端点安全,所以当我从浏览器点击它时,它会显示我的登录页面。

    我使用正确的凭据登录,它会将我转发到预期页面(因此看起来身份验证成功)

    当我使用我的一个控制器时 println springSecurityService.currentUser.email 它在控制台上打印正确的数据。

    然后我尝试在 GSP 上使用例如:

    < sec:ifNotLoggedIn> NOT LOGGED < /sec:ifNotLoggedIn>

    它显示NOT LOGGED。如果我尝试使用例如&lt;sec:loggedInUserInfo field="email" /&gt; 检索一些用户信息,则相同,它不会显示任何字符串。就像 Spring Security 不绑定 GSP 一样。

我做错了什么?缺少一些配置? 谢谢。

编辑

当我查看 SecurityTagLib ifNotLoggedIn 函数时,它使用 springSecurityService.isLoggedIn()。当我从控制器调用它时,它会返回预期的结果。当我在控制器和 GSP 中打印 session 时,都是一样的:

SPRING_SECURITY_CONTEXT = org.springframework.security.core.context.SecurityContextImpl@46b66c80: Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@46b66c80: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@611913a: Username: kamil; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@43458: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: AAB2217ABEE7EAF752573D44914B0005; Granted Authorities: ROLE_ADMIN

我设法在调试时运行我的应用程序,但它变得更加奇怪。首先,我在控制器上的断点显示 SpringSecurityService 对象,它的值 currentUser 设置正确。然后,相同的请求仍然在处理我在SecurityTagLib 中设置的断点(grails 只是跟随流控制器-> 渲染),它具有相同的 SpringSecurityService 对象(这意味着它是同一个 bean,没有重复等)但它只是丢失所有用户数据。奇怪!

肯定有问题,但不知道是什么...

【问题讨论】:

【参考方案1】:

让我回答我自己的问题,因为我发现了问题所在。 如果代码中的一切(眼睛和调试器)看起来都很好,我开始检查我的配置,因为它是唯一可能导致像这样的一些意外问题的地方,而且它是一个靶心。我开始怀疑 application.groovy 中定义的 spring 安全过滤器是否没有导致这些问题,结果证明是这样。

我在控制器中使用@Secured 注释来执行其中一项操作(安全ROLE_ADMIN),当调用该操作时,它会重定向到其他操作(在应用程序配置中过滤“无”)。当我从配置中删除过滤器并使用注释(@Secured(['permitAll'] 用于先前在应用程序配置中使用过滤器“无”配置的路径)时,它神奇地开始工作。我在 Grails 和 Spring Security 插件方面没有足够的经验,所以我不知道它究竟为什么会导致问题,所以如果有人知道确切的问题是什么 - 请分享。我只是假设在这种情况下混合应用配置过滤器和注释对我不起作用。

【讨论】:

以上是关于不属于gsp的适用范围的主要内容,如果未能解决你的问题,请参考以下文章

Grails 不会将变量传递给嵌套模板

我可以在 GSP 之外使用 grails 标签吗?

项目范围管理

项目范围管理

项目范围管理

如何列出属于一组范围内的所有数字对?