Можно сделать это в кастомном TokenEnhancer
классе:
public class CustomTokenEnhancer extends CubaTokenEnhancer {
@Inject
private TimeSource timeSource;
@Override
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
OAuth2AccessToken token = super.enhance(accessToken, authentication);
Object principal = authentication.getPrincipal();
if (principal instanceof String) {
DefaultOAuth2AccessToken mutableAccessToken = (DefaultOAuth2AccessToken) accessToken;
int delta = getTokenExpirationMsByPrincipal((String) principal);
mutableAccessToken.setExpiration(new Date(timeSource.currentTimeMillis() + delta));
}
return token;
}
private int getTokenExpirationMsByPrincipal(String principal) {
if ("admin".equals(principal))
return 60000;
else
return 30000;
}
}
Бин tokenEnhancer неоходимо переопределить в rest-dispatcher-spring.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.company.sample.rest"/>
<bean id="tokenEnhancer" class="com.company.sample.rest.tokenenhancer.CustomTokenEnhancer"/>
</beans>
Вот пример проекта, где по урл http://localhost:8080/app/rest/my-oauth/token возвращается токен с expiration, заданным внутри tokenEnhancer:
rest-token-generation-sample.zip (82.0 КБ)