1

私たちのアプリケーションは Spring (MVC、トランザクション、認証など) で構築されています。認証には LoginUrlAuthenticationEntryPoint を使用します (春のセキュリティ xml 全体については、以下を参照してください)。Web クライアント (jsp) は j_spring_security_check フォームを使用してこのアプリにログインします。アプリには REST API があり、ブラウザー コード (Web クライアント) はアプリに対して REST 呼び出しを行います。これまでのところ、すべてがうまく機能しています。アプリをテストするコードを Java で記述しています。REST 呼び出しを使用したエンド ツー エンドのテストです (実際のクライアント、私の場合は Web クライアントがアプリを呼び出す方法に似ています)。アプリへの REST 呼び出しを行うために、テスト側で Apache の HttpClient を使用しています。Java で記述されたテスト コードからアプリに認証/ログインする方法を知っていますか? どんなガイダンスも大歓迎です。ありがとう、ベビーカー。

<security:global-method-security secured-annotations="enabled" pre-post-annotations="enabled"/>

<security:http auto-config="false" use-expressions="true" entry-point-ref="authenticationEntryPoint">
    <security:intercept-url pattern="/login*" filters="none"/>
    <security:intercept-url pattern="/agentMsg" filters="none"/>
    <security:intercept-url pattern="/wait" filters="none"/>
    <security:intercept-url pattern="/systemConfig/**" filters="none"/>
    <security:intercept-url pattern="/js/**" filters="none" />
    <security:intercept-url pattern="/css/**" filters="none" />
    <security:intercept-url pattern="/images/**" filters="none" />
    <security:intercept-url pattern="/heartbeat" filters="none" />
    <security:intercept-url pattern="/reposTracking" filters="none" />
    <security:intercept-url pattern="/alerts/sev" filters="none" />
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:form-login  
        login-page="/login" 
        default-target-url="/" 
        authentication-failure-url="/login?login_error=1" 
        authentication-success-handler-ref="mcLoginSuccessHandler"
        authentication-failure-handler-ref="mcLoginFailureHandler"
    />
    <security:remember-me/>
    <security:logout success-handler-ref="mcLogoutHandler"/>
    <security:custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter"/>
    <security:session-management session-authentication-strategy-ref="sas"/>
</security:http>

<!--  needed for remember-me service -->
<bean id="customUserDetailService" class="com.mycompany.admin.tools.webui.beans.MyCompanyUserDetailsService"/>

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


<bean id="vuiAuthenticationProvider" class="com.mycompany.admin.tools.webui.beans.VuiMycompanyUserDetailsAuthenticationProvider">
    <property name="userDetailsService" ref="customUserDetailService"/>
    <property name="passwordEncoder"    ref="md5PasswordEncoder"/>
</bean>

<bean id="md5PasswordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>      

<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
    <property name="loginFormUrl" value="/login"></property>
</bean>

 <bean id="concurrencyFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter">
    <property name="sessionRegistry" ref="sessionRegistry"/>
    <property name="expiredUrl" value="/login"/>
    <!-- <property name="redirectStrategy" value=""></property> -->
 </bean>

 <bean id="sas" class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
      <constructor-arg name="sessionRegistry" ref="sessionRegistry" />
      <property name="maximumSessions" value="-1" /> <!-- no limit on number of session per user -->
 </bean>

 <bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />

<bean id="mcLogoutHandler" class="com.mycompany.admin.tools.webui.servlets.McLogoutHandler"/>
<bean id="mcLoginSuccessHandler" class="com.mycompany.admin.tools.webui.servlets.McLoginSuccessHandler"/>
<bean id="mcLoginFailureHandler" class="com.mycompany.admin.tools.webui.servlets.McLoginFailureHandler"/>

4

2 に答える 2

2

まず第一に、テストが http リクエストを行っている場合、それらは単体テストではなく機能テストです。

このようなテストを機能させたい場合は、基本的に、ブラウザからログインするときに実行される手順を実行する必要がありますPOST。後続の各呼び出し。/j_spring_security_checkJSESSIONID

于 2013-03-05T21:09:27.437 に答える
0

1 つ下のレベルでテストする必要があります。単体テストの方法でビジネス ロジックをテストします。RestEasy/CXF/Jersey/メソッドが適切に呼び出されているかどうかをテストする必要があるのはなぜですか? spring-security が正常に機能するかどうかをテストする必要がありますか? 誰かがすでに単体テストを書いていると思います。

統合テストについては、Spring のドキュメントを参照してください。認証なしでもう少し単純なコンテキストをセットアップして、MockHttpRequest を呼び出すことができます。

REST テストでは、SoapUI も使用できます。

于 2013-03-05T21:16:08.763 に答える