2016-04-14 22 views
0

私はスプリングセキュリティ4を使用していますが、次の問題を抱えています。ここでスプリングセキュリティアクセスが拒否されました

春-のsecurity.xml

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="/admin**" access="hasRole('ADMIN')" /> 
</http> 

<authentication-manager> 
    <authentication-provider user-service-ref="customUserDetailsService"> 
    <password-encoder hash="plaintext" /> 
    </authentication-provider> 
</authentication-manager> 

ですこれは、ユーザー詳細サービスである:私は/adminページに移動すると

@Service 
@Transactional 
public class CustomUserDetailsService implements UserDetailsService { 

@Autowired 
private UserDAO userDAO;  

@Override 
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
    // TODO Auto-generated method stub 
    com.hersbitcloud.cancercloud.models.User instance = new com.hersbitcloud.cancercloud.models.User(username, null, null); 
    com.hersbitcloud.cancercloud.models.User domainUser = userDAO.findByExample(instance).get(0); 

    List<GrantedAuthority> setAuths = new ArrayList<GrantedAuthority>(); 
    setAuths.add(new SimpleGrantedAuthority(domainUser.getRole())); 

    User user = new User(
      domainUser.getUsername(), 
      domainUser.getPassword(), 
      setAuths 
    ); 

    return user; 

}  

、ログインページが表示されます。私はユーザ名とパスワードを使用しています。ADMINは、Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder.getContext().getAuthentication().getAuthorities();でバリデーションすることができます。

ただし、私が承認されると、HTTP Status 403 - Access is deniedと表示されます。私は、ユーザー名とパスワードが正しいことを意味していると思いますが、役割に問題があります。

何が問題ですか?

答えて

1

問題は、それがあるべき自分の役割であるROLE_ADMIN

+0

<インターセプト-URLパターン= "/ adminに**" アクセス= "hasRoleも( 'ADMIN')" /><インターセプト-URLパターンに変更= "/ admin ** "access =" hasRole( 'ROLE_ADMIN') "/>データベースの値をROLE_ADMINに変更してください –

+0

もう少し説明できますか? –

+0

驚いたことに、それは動作します!どうして? ** ROLE _ **から始める必要がありますか? –

関連する問題