2014-01-30 12 views
4

我設置了一個新鮮Grails應用程序(2.3.5)並安裝在彈簧安全芯插件(2.0-RC2)Grails的彈簧安全核心插件:如何刪除瀏覽器提示Ajax請求

我增加了下面的配置(我的「安全/ **」 urlmappings使用basicAuthenicationFilter):

grails.plugin.springsecurity.logout.postOnly = false 
    grails.plugin.springsecurity.rejectIfNoRule = true 
    grails.plugin.springsecurity.fii.rejectPublicInvocations = false 
    //Enable Basic Auth Filter 
    grails.plugin.springsecurity.useBasicAuth = true 
    grails.plugin.springsecurity.basic.realmName = "Example" 
    grails.plugin.springsecurity.filterChain.chainMap = [ 
      '/secure/**': 'JOINED_FILTERS,-exceptionTranslationFilter', 
      'app/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter' 
    ] 



grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.car.User' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.car.UserRole' 
grails.plugin.springsecurity.authority.className = 'com.car.Role' 
grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    '/app/**':      ['permitAll'], 
    '/index':       ['permitAll'], 
    '/index.gsp':      ['permitAll'], 
    '/**/js/**':      ['permitAll'], 
    '/**/css/**':      ['permitAll'], 
    '/**/images/**':     ['permitAll'], 
    '/**/favicon.ico':    ['permitAll'] 
] 

我在web應用程序的文件夾的角應用。基本上,當我從它發出ajax請求並在基本身份驗證頭中提供了錯誤的密碼時 - 系統會提示您使用默認瀏覽器提示符。該請求仍在等待處理。我是新來理解這一點,但我看起來像截獲請求的代碼有邏輯提示如果標題不存在或無效。

我確定我必須丟失一些明顯的東西,必須有一個簡單的方法來配置請求的行爲。有這樣的配置嗎?或者我應該創建一個自定義過濾器?

+0

我對新的spring-security-core插件語法並不熟悉,但看起來您可能會缺少'/ secure/**'的'staticRules'。我現在正在做一個類似的項目,所以我會嘗試一下,如果沒有人讓我接受,就發表一個迴應。 – dspies

+0

這是給你任何錯誤文件 –

+0

如果它相關的身份驗證請添加在你的配置'/安全/ *':['permitAll'], –

回答

5

在這種情況下爲HTTP Basic Authentication正在使用(useBasicAuth = true),則服務器返回401答覆與WWW-Authenticate: Basic,向其中該瀏覽器具有用於用戶名和密碼的彈出應答。

該行爲存在於所有瀏覽器中,無法更改,但有多種選擇。爲了避免彈出窗口,我們不能使用基本認證,而是使用其他一些機制。

最簡單的方法是使用除了Authorization標頭(用於基本認證)以外的其他標頭來傳遞憑證。

要配置彈簧安全性以在此新標頭上查找憑據,請查看17.2.1 section Request-Header Authentication,其中給出了一個示例以說明如何配置RequestHeaderAuthenticationFilter以查看給定標頭。

這是配置如何查找使用一個名爲X-MyCustomHeader頭憑據傳遞:

<security:http> 
    <!-- Additional http configuration omitted --> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="customAuthFilter" /> 
    </security:http> 

    <bean id="customAuthFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter"> 
    <property name="principalRequestHeader" value="X-MyCustomHeader"/> 
    <property name="authenticationManager" ref="authenticationManager" /> 
    </bean> 

    <bean id="preauthAuthProvider" 
class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
    <property name="preAuthenticatedUserDetailsService"> 
     <bean id="userDetailsServiceWrapper" 
      class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper"> 
     <property name="userDetailsService" ref="userDetailsService"/> 
     </bean> 
    </property> 
    </bean> 

    <security:authentication-manager alias="authenticationManager"> 
     <security:authentication-provider ref="preauthAuthProvider" /> 
    </security:authentication-manager> 

一般用於在前端應用,最好不要使用基本身份驗證,如瀏覽器緩存那些提出這樣的應用程序憑據容易受到請求僞造(CSRF)攻擊。

+0

謝謝,這種解釋是有道理的。我會嘗試一下。 – user648869

相關問題