【问题标题】:Spring Security Role Prefix and Custom User Details ServiceSpring Security 角色前缀和自定义用户详细信息服务
【发布时间】:2011-06-24 12:32:31
【问题描述】:

如何在 Spring 中使用自定义用户详细信息服务将角色前缀设置为 ""

    <beans:bean id="authService" class="com.cisco.badges.business.services.AuthenticationService"/>

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

@Service("authService")
public class AuthenticationService extends BaseService implements UserDetailsService, IAuthenticationService {

    @Autowired
    IUserRepository userRepository;

    @Autowired
    IAuthorityRepository authorityRepository;

    public AuthenticationService() {

    }

    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {

        User user = userRepository.findByUsername(username);

        if(user == null)
            throw new UsernameNotFoundException("No user with username '" + username + "' found!");

        List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();

        for (Role role : user.getRoles()) {
            authList.add(new GrantedAuthorityImpl(role.getName()));
        }

        UserAuthentication userAuthentication = new UserAuthentication(user.getUsername(), user.getPassword(), user.getEnabled() == 0 ? false : true, true, true, true, authList);

        userAuthentication.setSalt(user.getSalt());
        userAuthentication.setId(user.getId());

        return (UserDetails)userAuthentication;
    }
}

【问题讨论】:

    标签: spring-security roles security-roles


    【解决方案1】:
    <beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter">
        <beans:property name="rolePrefix" value="" />
    </beans:bean>
    

    就这样

    【讨论】:

      【解决方案2】:

      也可以使用映射器将_ROLE 附加到您当前的角色。在 Spring Boot 中:

      @Bean
      public GrantedAuthoritiesMapper grantedAuthoritiesMapper() {
          SimpleAuthorityMapper simpleMapper = new SimpleAuthorityMapper();
          simpleMapper.setPrefix("ROLE_");
      
          return simpleMapper;
      }
      

      之后,您应该将此映射器添加到您的提供程序:

      @Bean
      public DaoAuthenticationProvider authenticationProvider() {
          DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
          provider.setAuthoritiesMapper(authoritiesMapper());
      
          return provider;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-23
        • 2017-12-11
        • 2021-09-09
        • 2017-06-05
        • 2013-12-13
        • 2014-01-03
        • 2011-01-30
        • 1970-01-01
        • 2015-07-05
        相关资源
        最近更新 更多