Собственный механизм аутентификации. Настройка времени жизни токена

Подскажите пожалуйста, как при программной авторизации пользователя.

oAuthTokenIssuer.issueToken("login", defaultLocale, Collections.emptyMap()).getAccessToken().getExpiration()

выставить в параметрах время жизни токена? Без использования конфига

Expiration должен быть индивидуальным для каждого пользователя. Например user1 выдать токен до 12:00, а user2 до 17:00

Можно сделать это в кастомном 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 КБ)

2 симпатии