我使用的是Grails 2.2.2、SpringRC2 2.0.0和WebFlow -Security-Core2.0-RC2插件。我想确保流程中的最后一步,但一直无法完成。
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中是可能的吗?
发布于 2014-01-22 09:36:08
在安全检查之前,querystring会从url中剥离,所以我认为你需要自己显式地做这个检查。
SecurityExpressionRoot中isFullyAuthenticated()的实现是
public final boolean isFullyAuthenticated() {
return !trustResolver.isAnonymous(authentication) && !trustResolver.isRememberMe(authentication);
}因此,您可以依赖注入authenticationTrustResolver bean并执行相同的检查,例如
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)
}
}发布于 2014-01-25 01:52:12
或者,您可以这样做:
grails.plugin.springsecurity.interceptUrlMap = [
'/myController/connect': ["(request.getParameter('execute')?:'').matches('^e.*?s3\$') ? fullyAuthenticated : permitAll"]
]这个想法是为表达式公开HttpServletRequest,这样我们就可以决定是返回fullyAuthenticated还是permitAll。
发布于 2014-01-30 01:44:57
难道你不能直接导入这个类并为你的用户添加这个带有匹配角色的注释到你的step的方法中吗?
import grails.plugins.springsecurity.Secured
class MyClass() {
@Secured(['ROLE_USER'])
def lastStep() {
// do things
}
}未通过身份验证的用户将重定向到登录页面
https://stackoverflow.com/questions/21271823
复制相似问题