2017-05-01 94 views
0

我正在將現有應用程序從Grails 2.4.4升級到Grails 3.2.8。我試圖從grails shiro插件遷移到grails spring-security-shiro插件。我想在佈局模板gsp中執行正常的登錄檢查,除了訪問已登錄的用戶。Grails spring-security-shiro:在Apache中使用Apache Shiro主題 - 從shiro遷移到spring-security-shiro

以下是我在我的佈局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> 
+0

嗨mcroteau。我正在從Grails 2.2.5遷移到Grails 3.2.9。我也在使用grails-shiro插件。這個插件不再有效。你是否能夠遷移到春季安全 - shiro? – felipenasc

+0

是的,但不是沒有一點工作。我還必須爲第一關做出一些犧牲。我不得不主要使用spring安全性API,我可能最終只能完全轉向安全性。你掛在哪裏? – mcroteau

回答

0

我結束了使用Spring Security的核心的API來執行我需要的東西收到了。我還需要創建有些預期的自定義登錄屏幕。您可能只是跳轉到使用自定義權限邏輯彈出安全性。見下文。

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 
}