Запрет работы в нескольких одновременных сессиях#
Процедура RestrictSessions
запрещает работу в нескольких сессиях.
public class RestrictSessions implements Strategy {
private final Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic");
@Override public StrategyBeginState begin(final Context ctx) {
List<String> methods = new ArrayList<String>(Arrays.asList(ctx.availableMethods()));
if ("login".equals(ctx.prompt())){
methods.remove("cls");
return StrategyState.MORE(methods.toArray(new String[0]), true);
} else {
if(ctx.claims("subjectId") != null)
return StrategyState.ENOUGH();
else {
methods.remove("cls");
return StrategyState.MORE(methods.toArray(new String[0]));
}
}
}
@Override public StrategyState next(final Context ctx) {
Integer reqFactor = (ctx.user() == null) ? null : ctx.user().requiredFactor();
if(reqFactor == null || reqFactor == ctx.justCompletedFactor()) {
return StrategyState.ENOUGH_BUILDER().singleSession(true).build();
} else
return StrategyState.MORE(new String[]{});
}
}