Весенняя безопасность 3.0.x. не обеспечивает такое сопоставление из коробки.
Но вы можете реализовать его самостоятельно, расширив поставщика аутентификации, который используется для вашего метода аутентификации.
Если вы используете DaoAuthenticationProvider (который внутри использует UserDetailsService), вы можете переопределить метод addCustomAuthorities(String username, List<GrantedAuthority> authorities), чтобы добавить новые/сопоставленные роли в соответствии с уже предоставленными однажды.
например расширенный UserDetailsService :
...
@Override
protected void addCustomAuthorities(String username, List<GrantedAuthority> authorities) {
super.addCustomAuthorities(username, authorities);
List<GrantedAuthority> additional = new ArrayList<GrantedAuthority>();
for (GrantedAuthority role : authorities) {
additional .addAll(vourMappingService.getAdditionalForRole(role));
}
authorities.addAll(additional );
}
которые используют YourMappingService для сопоставления ролей (путем добавления новых ролей к существующим один раз)
public class YourMappingService
/**
* Property bases mapping of roles to privileges.
* Every role is one line, the privileges are comma separated.
*/
private Properties roleToPrivileges;
public YourMappingService(Properties roleToPrivileges) {
if (roleToPrivileges == null) {
throw new IllegalArgumentException("roleToPrivileges must not be null");
}
this.roleToPrivileges = roleToPrivileges;
}
@Override
public Collection<? extends GrantedAuthority> getAdditionalForRole(GrantedAuthority role) {
String authority = role.getAuthority();
if(authority != null) {
String commaSeparatedPrivileges = roleToPrivileges.getProperty(role.getAuthority());
if (commaSeparatedPrivileges != null) {
List<GrantedAuthority> privileges = new ArrayList<GrantedAuthority>();
for(String privilegeName : StringUtils.commaDelimitedListToSet(commaSeparatedPrivileges)) {
privileges.add(new GrantedAuthorityImpl(privilegeName.trim()));
}
return privileges;
} else {
return Collections.emptyList();
}
} else {
return Collections.emptyList();
}
}
}
конфигурация:
<bean id="myUserDetailsService" class="de.humanfork.springsecurityroles.impl.JdbcDaoPrivilegesImpl">
<constructor-arg ref="yourMappingService"/>
<property name="dataSource" ref="dataSource"/>
<property name="usersByUsernameQuery" value="SELECT login,encryptedPassword,loginEnabled FROM user WHERE login = ?"/>
<property name="enableAuthorities" value="true"/>
<property name="authoritiesByUsernameQuery" value="SELECT u.login, r.securityRoles FROM user u, user2security_roles r WHERE u.login= ? AND u.id = r. User_fk;"/>
</bean>
<bean id="yourMappingService" class="ZourMappingService">
<constructor-arg>
<props>
<prop key="ROLE_ADMIN">
ROLE_backend_access,
ROLE_user_mngt,
ROLE_passwordLostRequest_mngt,
ROLE_log_mngt
</prop>
<prop key="ROLE_USER">
</prop>
</props>
</constructor-arg>
</bean>
person
Ralph
schedule
14.04.2014