场景与实现逻辑
- 我的登录接口,在输入账号密码成功后进行中间页
- 中间页可以通过添加Authenticator的实现类来写逻辑
-
auth服务器托管enticate
方法是渲染页面的,action
方法是提交表单后的逻辑 -
context.success()
方法表示认证成功,将进行重写向操作 - 可以通过
Response.status(302).header(HttpHeaders.LOCATION, modifyPasswordPage).build()
实现自定义的重定向地址 - 在kc配置中,复制一个brower认证流,为账号密码模块添加一个行为(execution)
核心代码
@Override
public void authenticate(AuthenticationFlowContext context) {
if (context.getAuthenticationSession().getUserSessionNotes().containsKey("password")) {
String password = context.getAuthenticationSession().getUserSessionNotes().get("password").toLowerCase();
if (password.matches(regex)) {
context.success();
return;
}
}
Response challenge = context.form().createForm("login-simple-password-alert.ftl");
context.challenge(challenge);
}
@Override
public void action(AuthenticationFlowContext context) {
MultivaluedMap formData = context.getHttpRequest().getDecodedFormParameters();
if (formData.containsKey("submitType") && formData.get("submitType").get(0).equals("1")) {
AuthenticatorConfigModel authenticatorConfigModel =
KeycloakUtil.getAuthenticatorConfigByAlias(context.getSession(), V6_CONFIG);
String mainSite = "https://www.abc.com";
if (authenticatorConfigModel.getConfig().containsKey(MAIN_SITE) &&
StringUtils.isNotBlank(authenticatorConfigModel.getConfig().get(MAIN_SITE))) {
mainSite = authenticatorConfigMod服务器托管el.getConfig().get(MAIN_SITE);
}
if (mainSite.endsWith("/")) {
mainSite = mainSite.substring(0, mainSite.length() - 1);
}
context.success();
String modifyPasswordPage = mainSite + "/usercenter/info";
Response response = Response.status(302)
.header(HttpHeaders.LOCATION, modifyPasswordPage).build();
context.challenge(response);
return;
}
context.success();
}
登录中间页面login-simple-password-alert.ftl
- srcmainresourcesthemecustomlogin
- 这个目录下有皮肤文件login.ftl和中间页文件login-simple-password-alert.ftl
- kc后台为指定客户端或者领域设置登录皮肤为custom
- login-simple-password-alert.ftl如下:
默认登录后的跳换
登录后去个人中心
function submit(val) {
document.getElementById("submitType").value=val;
document.getElementById('kc-form-login').submit();
}
自定义登录逻辑的KC配置如下
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 求求你别再用OkHttp调用API接口了,快来试试这款HTTP客户端库吧
引言 在日常业务开发中,我们时常需要使用一些其他公司的服务,调用第三方系统的接口,这时就会涉及到网络请求,通常我们可以使用HttpClient,OkHttp等框架去完成网络请求。随着RESTful API的普及,一个高效、简洁且易于维护的HTTP客户端库显得尤…