1

UserDetailsS​​erviceを実装することにより、Springベースの認証を使用しています。以下は私の春の設定です

<authentication-manager>
    <authentication-provider user-service-ref="authenticationService">
        <password-encoder ref="passwordEncoder">
            <salt-source ref="authenticationService"/>
        </password-encoder>
    </authentication-provider>
</authentication-manager>

私の認証サービスは次のようになります:

public class AuthenticationServiceImpl implements AuthenticationService, UserDetailsService, SaltSource {
    ....
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { 
        ....
        return new org.springframework.security.core.userdetails.User(username, user.getPassword(), true, true, true, true, authorities);
    }
 }

ここで問題となるのは、スプリングコントローラーの1つから新しいスレッドを作成するときです。そのスレッドでユーザーを認証するにはどうすればよいですか?

4

2 に答える 2

1

構成自体に設定するためのより良い解決策を見つけました。次のコードを使用します。

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass"
              value="org.springframework.security.core.context.SecurityContextHolder"/>
    <property name="targetMethod" value="setStrategyName"/>
    <property name="arguments"><b:list><b:value>MODE_INHERITABLETHREADLOCAL</value></list></property>
</bean>

魅力のように機能します。

于 2012-11-13T12:29:32.380 に答える
1
 SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(loadUserByUsername), password));
于 2012-11-13T12:07:50.370 に答える