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
と表示されます。私は、ユーザー名とパスワードが正しいことを意味していると思いますが、役割に問題があります。
何が問題ですか?
<インターセプト-URLパターン= "/ adminに**" アクセス= "hasRoleも( 'ADMIN')" /><インターセプト-URLパターンに変更= "/ admin ** "access =" hasRole( 'ROLE_ADMIN') "/>データベースの値をROLE_ADMINに変更してください –
もう少し説明できますか? –
驚いたことに、それは動作します!どうして? ** ROLE _ **から始める必要がありますか? –