2013-12-15 33 views
0

我正在使用最新版本的spring 3.2.5和spring java 3.1.4與java 6.我已經使用此頁面中的說明設置CAS服務器 https://wiki.jasig.org/display/CASUM/Best+Practice+-+Setting+Up+CAS+Locally+using+the+Maven+WAR+Overlay+MethodCAS Spring Security Java - 不授權用戶詳細信息服務不加載角色

CAS服務器部分工作正常並進行身份驗證。 我有使用該網頁上的說明和各種其他頁面 https://wiki.jasig.org/display/CASC/Configuring+the+JA-SIG+CAS+Client+for+Java+using+Spring

當試圖在應用程序進入安全頁面設置客戶端,CAS被重定向到正確的登錄頁面,然後正確地驗證,然後正確地重定向到調用應用程序頁面,但不調用提供的用戶詳細信息服務,不授權用戶,也不使用用戶詳細信息服務加載角色。

認證用戶登錄此頁面後。該頁面是正確的,但我不想在URL中看到ticket參數,並且還使用提供的用戶詳細信息服務bean加載用戶和角色。

http://localhost:8080/my/sports-life/schedule?ticket=ST-3-xklhdGJW6gZxieELGxo5-cas01.example.org 

任何獲得我授權的指針都會受到高度讚賞。提前致謝。

下面是從應用程序上下文

<!-- Single sign on with CAS --> 


    <bean id="casEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint"> 
     <property name="loginUrl" value="https://localhost:8443/cas/login"/> 
     <property name="serviceProperties" ref="serviceProperties"/> 
    </bean> 

    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"> 
     <property name="service" value="http://localhost:8080/my/sports-life/schedule/j_spring_cas_security_check"/> 
     <property name="sendRenew" value="false"/> 
    </bean> 

    <bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter"> 
     <property name="authenticationManager" ref="preAuthenticationManager"/> 

     <property name="authenticationSuccessHandler"> 
      <bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
       <property name="defaultTargetUrl" value="/my"/> 
       <property name="targetUrlParameter" value="spring-security-redirect" /> 
      </bean> 
     </property> 
    </bean> 

    <bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider"> 

     <property name="userDetailsService" ref="myAccountDetailsService" /> 
     <property name="serviceProperties" ref="serviceProperties" /> 
     <property name="ticketValidator"> 
      <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> 
       <constructor-arg index="0" value="https://localhost:8443/cas" /> 
      </bean> 
     </property> 
     <property name="key" value="Vi9Pra88Si777"/> 
     <property name="authenticationUserDetailsService" ref="authenticationUserDetailsService"/> 
    </bean> 

    <bean id="authenticationUserDetailsService" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">  
     <property name="userDetailsService" ref="myAccountDetailsService"/>  
    </bean> 



    <bean name="authenticationFilter" class="org.jasig.cas.client.authentication.AuthenticationFilter"> 
     <property name="casServerLoginUrl" value="https://localhost:8443/cas/login" /> 
     <property name="renew" value="false" /> 
     <property name="gateway" value="false" /> 
     <property name="service" value="http://localhost:8080/my/sports-life/schedule" /> 
    </bean> 

<!-- 
<bean 
    name="ticketValidationFilter" 
    class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"> 

    <property name="service" value="http://localhost:8080/my/sports-life/schedule" /> 
    <property name="ticketValidator"> 
      <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> 
       <constructor-arg index="0" value="https://localhost:8443/cas" /> 
      </bean> 
    </property> 
</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="myAccountDetailsService"/> 
     </bean> 
    </property> 
    </bean> 

    <!-- 
<bean id="preAuthEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" /> 

    <bean id="j2eePreAuthFilter" class="org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter"> 
     <property name="authenticationManager" ref="preAuthenticationManager"/> 
     <property name="authenticationDetailsSource"> 
      <bean class="org.springframework.security.web.authentication.WebAuthenticationDetailsSource" /> 
     </property> 
</bean> 
    --> 

     <bean id="myAccountDetailsService" class="com.viprasi.security.AccountDetailsServiceImpl">   
    </bean> 

然後這裏的相關豆是從我的春季安全配置文件的相關配置。

<http use-expressions="true" entry-point-ref="casEntryPoint"> 

     <intercept-url pattern="/app/j_spring_cas*" access="permitAll" 
      requires-channel="https" /> 


     <!-- Member --> 
     <intercept-url pattern="/app/**" access="isAuthenticated()" /> 


     <access-denied-handler error-page="/app/login/accessdenied" /> 

     <anonymous /> 

     <http-basic /> 

     <custom-filter position="CAS_FILTER" ref="casFilter" /> 

    </http> 

    <authentication-manager alias="preAuthenticationManager"> 

     <authentication-provider ref="casAuthenticationProvider" /> 
     <!-- 
     <authentication-provider user-service-ref='accountDetailsService' /> 
     --> 
    </authentication-manager> 

回答

0

我們遇到了很多問題,最後主要的罪魁禍首是URL重寫過濾器。此過濾器正在更改url,然後彈出安全性,cas未能處理更改的URL。在安全過濾器下方移動URL重寫過濾器後,它們全部開始工作。

0

我認爲匿名標籤應用中的作用* IS_AUTHENTICATED_ANONYMOUSLY *給用戶。這 的結果是,用戶isAuthenticated(),並沒有進一步的過濾器被調用(如誰調用UserDetailsS​​ervive一) 變化isAuthenticated()來hasRole(「角色」)

+0

按照您的建議將它更改爲hasRole後,仍然會看到相同的行爲。我的任何突破點都未達到授權過程中應該達到的目標。看起來好像我缺少一些過濾器或其他bean包含。感謝您的建議,在這方面非常有效。 –

0

我有一個例子cas client你可以check in cas-web-client如何提供您自己的授權

相關問題