0

認証にはSpring Securityを使用しています。@Pageどのタイプのユーザーがページにアクセスできるかを定義する注釈を変更しました。

その後、受け入れテストで、次のエラーが発生し始めました。

public void login(@Named("email") String email, @Named("password") String password) {
    fillUpLoginForm(email, password);
    waitForElement(MosquitoElements.MainNavigationBar.LOGOUT);
    securityService.login(email, password); // authenticates user in test environment too
}

ここに何か問題があることがわかりました:

        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(email, password);
    getSecurityContext().setAuthentication(authenticationManager.authenticate(token));

何が問題を引き起こす可能性がありますか?

エラー:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.securityContext': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

注釈の変更:

boolean requiresAdminPrivileges() default false;

Authorities[] requiredAuthorities();

アプリケーションでは、すべてが正常に機能しますが、テストのみに問題があります。

4

1 に答える 1

1

テストのアプリケーション コンテキストでセッション スコープをエミュレートしてみてください。

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
    <map>
        <entry key="session">
            <bean class="org.springframework.context.support.SimpleThreadScope"/>
        </entry>
    </map>
    </property>
</bean>
于 2013-03-25T14:37:51.437 に答える