Grails spring-security-shiro:在 gsp 中使用 Apache Shiro 主题 - 从 shiro 迁移到 spring-security-shiro
Grails spring-security-shiro : working with Apache Shiro subject in gsp - migrating from shiro to spring-security-shiro
我正在将现有应用程序从 Grails 2.4.4 升级到 Grails 3.2.8。我正在尝试从 grails shiro
插件迁移到 grails spring-security-shiro
插件。除了访问已登录的用户外,我还想在布局模板 gsp 中执行正常的登录检查。
这是我之前在布局 gsp 中的内容
main.gsp
<g:if test="${shiro.principal()}">
Welcome back
<g:link controller="account" action="profile">
<shiro:principal/>
</g:link>|
<g:link controller="auth" action="signOut" class="navbar-brand">Logout</g:link>
</g:if>
<g:else>
<g:link controller="auth" action="login" class="navbar-brand">Login</g:link>
</g:else>
我最终使用 spring 安全核心的 api 来执行我需要的操作。我还需要创建一些符合预期的自定义登录屏幕。您可能只是使用自定义权限逻辑跳转到 spring 安全性。见下文。
http://grails-plugins.github.io/grails-spring-security-core/3.2.x/index.html#securityTagLib
<sec:ifLoggedIn>
Welcome back
<g:link controller="account" action="profile">
<sec:username/>
</g:link>|
<g:link controller="logout">Logout</g:link>
</sec:ifLoggedIn>
<sec:ifNotLoggedIn>
<g:link controller="auth" action="your_custom_login">Login</g:link>
</sec:ifNotLoggedIn>
权限逻辑
我按照建议从严格基于字符串的权限切换到权限对象
Account.groovy
static hasMany = [ permissions: Permission ]
权限
class Permission {
Account account
String permission
static constraints = {
}
}
使用方法:
def permission = accountInstance.permissions.find {
it.permission == "account:customer_profile:${accountInstance.id}"
}
if (!permission){
flash.message = "You do not have permission to access this..."
redirect(controller:'controller', action:'index')
return
}
我正在将现有应用程序从 Grails 2.4.4 升级到 Grails 3.2.8。我正在尝试从 grails shiro
插件迁移到 grails spring-security-shiro
插件。除了访问已登录的用户外,我还想在布局模板 gsp 中执行正常的登录检查。
这是我之前在布局 gsp 中的内容
main.gsp
<g:if test="${shiro.principal()}">
Welcome back
<g:link controller="account" action="profile">
<shiro:principal/>
</g:link>|
<g:link controller="auth" action="signOut" class="navbar-brand">Logout</g:link>
</g:if>
<g:else>
<g:link controller="auth" action="login" class="navbar-brand">Login</g:link>
</g:else>
我最终使用 spring 安全核心的 api 来执行我需要的操作。我还需要创建一些符合预期的自定义登录屏幕。您可能只是使用自定义权限逻辑跳转到 spring 安全性。见下文。
http://grails-plugins.github.io/grails-spring-security-core/3.2.x/index.html#securityTagLib
<sec:ifLoggedIn>
Welcome back
<g:link controller="account" action="profile">
<sec:username/>
</g:link>|
<g:link controller="logout">Logout</g:link>
</sec:ifLoggedIn>
<sec:ifNotLoggedIn>
<g:link controller="auth" action="your_custom_login">Login</g:link>
</sec:ifNotLoggedIn>
权限逻辑
我按照建议从严格基于字符串的权限切换到权限对象
Account.groovy
static hasMany = [ permissions: Permission ]
权限
class Permission {
Account account
String permission
static constraints = {
}
}
使用方法:
def permission = accountInstance.permissions.find {
it.permission == "account:customer_profile:${accountInstance.id}"
}
if (!permission){
flash.message = "You do not have permission to access this..."
redirect(controller:'controller', action:'index')
return
}