Запрет входа после истечения срока действия аккаунта#
Процедура AccountExpiresCheck
использует атрибут accountExpires
для принятия решения о доступе пользователя к приложению. Для работы
этой процедуры необходимо создать атрибут accountExpires
с типом
строка (String
). В этот атрибут необходимо сохранить дату (в формате
гггг-ММ-дд ЧЧ:мм
, например 2021-09-23 13:58
), после наступления
которой доступ в приложение будет заблокирован для данного пользователя.
Если значение атрибута не указано, то пользователь будет допущен в
приложение.
public class AccountExpiresCheck implements Strategy {
private final Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic");
@Override public StrategyBeginState begin(final Context ctx) {
if ("login".equals(ctx.prompt())){
List<String> methods = new ArrayList<String>(Arrays.asList(ctx.availableMethods()));
methods.remove("cls");
return StrategyState.MORE(methods.toArray(new String[0]), true);
} else {
if(ctx.claims("subjectId") != null)
return StrategyState.ENOUGH();
else
return StrategyState.MORE(new String[]{});
}
}
@Override public StrategyState next(final Context ctx) {
if (ctx.claims("accountExpires") != null && isExpired(ctx.claims("accountExpires")))
return StrategyState.DENY("account_expired", true);
Integer reqFactor = (ctx.user() == null) ? null : ctx.user().requiredFactor();
if(reqFactor == null || reqFactor == ctx.justCompletedFactor())
return StrategyState.ENOUGH();
else
return StrategyState.MORE(new String[]{});
}
public static boolean isExpired(String strData) {
try {
Date now = new Date();
Date date = new SimpleDateFormat("yyyy-M-d HH:mm").parse(strData);
return now.after(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}