|
|
|
@ -22,21 +22,30 @@ import org.springframework.core.convert.converter.Converter; |
|
|
|
import org.springframework.security.authentication.AbstractAuthenticationToken; |
|
|
|
import org.springframework.security.authentication.AbstractAuthenticationToken; |
|
|
|
import org.springframework.security.core.GrantedAuthority; |
|
|
|
import org.springframework.security.core.GrantedAuthority; |
|
|
|
import org.springframework.security.oauth2.jwt.Jwt; |
|
|
|
import org.springframework.security.oauth2.jwt.Jwt; |
|
|
|
|
|
|
|
import org.springframework.security.oauth2.jwt.JwtClaimNames; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* @author Rob Winch |
|
|
|
* @author Rob Winch |
|
|
|
* @author Josh Cummings |
|
|
|
* @author Josh Cummings |
|
|
|
|
|
|
|
* @author Evgeniy Cheban |
|
|
|
* @since 5.1 |
|
|
|
* @since 5.1 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class JwtAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> { |
|
|
|
public class JwtAuthenticationConverter implements Converter<Jwt, AbstractAuthenticationToken> { |
|
|
|
private Converter<Jwt, Collection<GrantedAuthority>> jwtGrantedAuthoritiesConverter |
|
|
|
private Converter<Jwt, Collection<GrantedAuthority>> jwtGrantedAuthoritiesConverter |
|
|
|
= new JwtGrantedAuthoritiesConverter(); |
|
|
|
= new JwtGrantedAuthoritiesConverter(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String principalClaimName; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public final AbstractAuthenticationToken convert(Jwt jwt) { |
|
|
|
public final AbstractAuthenticationToken convert(Jwt jwt) { |
|
|
|
Collection<GrantedAuthority> authorities = extractAuthorities(jwt); |
|
|
|
Collection<GrantedAuthority> authorities = extractAuthorities(jwt); |
|
|
|
return new JwtAuthenticationToken(jwt, authorities); |
|
|
|
if (this.principalClaimName == null) { |
|
|
|
|
|
|
|
return new JwtAuthenticationToken(jwt, authorities); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String name = jwt.getClaim(this.principalClaimName); |
|
|
|
|
|
|
|
return new JwtAuthenticationToken(jwt, authorities, name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -65,4 +74,16 @@ public class JwtAuthenticationConverter implements Converter<Jwt, AbstractAuthen |
|
|
|
Assert.notNull(jwtGrantedAuthoritiesConverter, "jwtGrantedAuthoritiesConverter cannot be null"); |
|
|
|
Assert.notNull(jwtGrantedAuthoritiesConverter, "jwtGrantedAuthoritiesConverter cannot be null"); |
|
|
|
this.jwtGrantedAuthoritiesConverter = jwtGrantedAuthoritiesConverter; |
|
|
|
this.jwtGrantedAuthoritiesConverter = jwtGrantedAuthoritiesConverter; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Sets the principal claim name. |
|
|
|
|
|
|
|
* Defaults to {@link JwtClaimNames#SUB}. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param principalClaimName The principal claim name |
|
|
|
|
|
|
|
* @since 5.4 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public void setPrincipalClaimName(String principalClaimName) { |
|
|
|
|
|
|
|
Assert.hasText(principalClaimName, "principalClaimName cannot be empty"); |
|
|
|
|
|
|
|
this.principalClaimName = principalClaimName; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|