2

Spring MVCを使用して、SpringSecurityCASサーバーに対して認証を行うクライアントアプリケーションを作成しています。

私が遭遇している問題は、ユーザーが正常に認証した後、ブラウザーに404エラーが表示されることです。アプリケーションで「成功」ページを設定する方法がわかりません。または、CASサーバーのプロパティのどこかにコールバックURLを定義する必要がありますか?これまでの私のコードは次のとおりです。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- The definition of the Root Spring Container shared by all Servlets 
    and Filters -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/applicationContext-security.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

applicationContext-security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:sec="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

<!-- Enable security, let the casAuthenticationEntryPoint handle all intercepted 
    urls. The CAS_FILTER needs to be in the right position within the filter 
    chain. -->
<security:http entry-point-ref="casAuthenticationEntryPoint"
    auto-config="true">
    <security:intercept-url pattern="/**" access="ROLE_USER"></security:intercept-url>
    <security:custom-filter position="CAS_FILTER"
        ref="casAuthenticationFilter"></security:custom-filter>
</security:http>

<!-- Required for the casProcessingFilter, so define it explicitly set and 
    specify an Id Even though the authenticationManager is created by default 
    when namespace based config is used. -->
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
        ref="casAuthenticationProvider"></security:authentication-provider>
</security:authentication-manager>

<!-- This section is used to configure CAS. The service is the actual redirect 
    that will be triggered after the CAS login sequence. -->
<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
    <property name="service"
        value="https://localhost:8443/cas/j_spring_cas_security_check"></property>
    <property name="sendRenew" value="false"></property>
</bean>

<!-- The CAS filter handles the redirect from the CAS server and starts 
    the ticket validation. -->
<bean id="casAuthenticationFilter"
    class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"></property>
</bean>

<!-- The entryPoint intercepts all the CAS authentication requests. It redirects 
    to the CAS loginUrl for the CAS login page. -->
<bean id="casAuthenticationEntryPoint"
    class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
    <property name="loginUrl" value="https://localhost:8443/cas/login"></property>
    <property name="serviceProperties" ref="serviceProperties"></property>
</bean>

<!-- Handles the CAS ticket processing. -->
<bean id="casAuthenticationProvider"
    class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    <property name="userDetailsService" ref="userService"></property>
    <property name="serviceProperties" ref="serviceProperties"></property>
    <property name="ticketValidator">
        <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
            <constructor-arg index="0" value="https://localhost:8443/cas">
            </constructor-arg>
        </bean>
    </property>
    <property name="key" value="cas"></property>
</bean>

<!-- The users available for this application. -->
<security:user-service id="userService">
    <security:user name="user" password="user" authorities="ROLE_USER"></security:user>
</security:user-service>

助けていただければ幸いです!

上記のコードは、次のチュートリアルから使用されました:http ://www.oudmaijer.com/2009/12/28/spring-3-spring-security-3-cas-3-3-4-integration/


更新:ネットワークフローは次のとおりです(Firebugから取得):

  1. ユーザーがクリックするhttps://localhost:8443/SpringMVC_CAS/secure/index.jsp

  2. ブラウザはから「一時的に302移動」を実行します/myapp/secure/index.jsp

  3. CASはログインを促しますhttps://localhost:8443/cas/login?service=https%3A%2F%2Flocalhost%3A8443%2Fcas%2Fj_spring_cas_security_check

  4. https://localhost:8443/cas/j_spring_cas_security_check?ticket=ST-17-RHf3OTJXAWePgzVGP2nc-cas

  5. ブラウザの表示https://localhost:8443/cas/login?ticket=ST-17-RHf3OTJXAWePgzVGP2nc-cas

4

1 に答える 1

4

あなたはこのようなものを追加することによってそれを行うことができますAuthenticationSuccessHandler

<bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="authenticationFailureHandler">
        <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
            <property name="defaultFailureUrl" value="/casfailed.jsp"/>
        </bean>
    </property>
    <property name="authenticationSuccessHandler">
        <bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
            <property name="defaultTargetUrl" value="/"/>
        </bean>
    </property>
</bean>

alwaysUseDefaultTargetUrlプロパティもtrueに設定すると、defaultTargetUrlが宛先に使用されます。そうでない場合、認証プロセスが開始される前に元の宛先にリダイレクトされます。

参照:

于 2012-11-21T16:35:31.677 に答える