不属于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
。如果我尝试使用例如<sec:loggedInUserInfo field="email" />
检索一些用户信息,则相同,它不会显示任何字符串。就像 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的适用范围的主要内容,如果未能解决你的问题,请参考以下文章