2016-03-25 13 views
1

私は最近Spring Security 3から4にアップグレードしました。コントローラの注釈付き入力引数@AuthenticationPrincipalは空になりました。私はそれを回避するために、非推奨のorg.springframework.security.web.bind.annotation.AuthenticationPrincipalを使用しましたが、org.springframework.security.core.annotationパッケージからのものを使用すると、それは空です。私がしなければSpring Security 4 @AuthenticationPrincipalがcore.annotation.AuthenticationPrincipalで空ですが、web.bind.annotation.AuthenticationPrincipalではありません。

またうまくいく:
User activeUser = (User) ((Authentication) principal).getPrincipal();

を私は最高の私ができるように、移行ガイドを追いました。ここで

は私spring-security.xmlです:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" 
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-4.0.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd"> 

<!-- enable use-expressions --> 
<http auto-config="false" use-expressions="true"> 
    <intercept-url pattern="/secure/admin**" access="hasAnyRole('ROLE_ADMIN', 'ROLE_SUPER_ADMIN')" /> 
    <intercept-url pattern="/secure/admin/**" access="hasAnyRole('ROLE_ADMIN', 'ROLE_SUPER_ADMIN')" /> 
    <intercept-url pattern="/secure/user**" access="isAuthenticated()" /> 
    <intercept-url pattern="/secure/user/**" access="isAuthenticated()" /> 
    <intercept-url pattern="/**" access="permitAll" /> 

    <form-login login-page="/login" 
     authentication-success-handler-ref="redirectRoleStrategy" 
     authentication-failure-url="/login?error" 
     username-parameter="username" 
     password-parameter="password" 
     login-processing-url="/auth/login_check" /> 

    <logout logout-success-url="/login?logout" delete-cookies="JSESSIONID" /> 
    <csrf disabled="true" /> 
</http> 

<beans:bean id='userDetailsService' class='com.myproject.security.UserDetailsServiceImpl' /> 

<beans:bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> 
    <beans:property name="userDetailsService" ref="userDetailsService"/> 
</beans:bean> 

<beans:bean id='authenticationManager' class='org.springframework.security.authentication.ProviderManager'> 
    <beans:constructor-arg> 
     <beans:list> 
      <beans:ref bean='authenticationProvider' /> 
     </beans:list> 
    </beans:constructor-arg> 
</beans:bean> 

<!-- Select users and user_roles from database --> 
<authentication-manager> 
    <authentication-provider user-service-ref='userDetailsService'> 
     <password-encoder ref="encoder" /> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"> 
    <beans:constructor-arg name="strength" value="10" /> 
</beans:bean> 

<beans:bean id="redirectRoleStrategy" class="com.myproject.security.RoleBasedAuthenticationSuccessHandler"> 
    <beans:property name="roleUrlMap"> 
     <beans:map> 
      <beans:entry key="ROLE_ADMIN" value="/secure/admin"/> 
      <beans:entry key="ROLE_SUPER_ADMIN" value="/secure/admin"/> 
     </beans:map> 
    </beans:property> 
</beans:bean> 

+0

Spring MVCの設定はどうなっていますか? –

+0

http://stackoverflow.com/questions/36219009/spring-security-deprecated-authenticationprincipal/36221381#36221381の重複している可能性があります –

答えて

0

私はそれを考え出しました。それは確かにSpring Security deprecated @AuthenticationPrincipalの複製です。残念ながら、その投稿を見つけることは決してできませんでした。

私は私のapplicationContext.xmlをで

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver" /> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver" /> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

を変更しました。

関連する問題