对登录认证进行拦截
典型应用场景如下:
-
记录登录审计日志
-
IP、浏览器控制
/** * 登录之前的操作<br> * * 此时<code>AppContext.getCurrentUser()</code>是<code>null</code>的 * * @param request * @param response * @return <code>Error</code>标示本次登录终止,返回到登录页;<code>OK</code>正常往下进行 */ public LoginResult preHandle(HttpServletRequest request, HttpServletResponse response); /** * 在登录验证成功后的操作<br> * 此时<code>AppContext.getCurrentUser()</code>有值 * @param request * @param response * @return <code>Error</code>标示本次登录终止,返回到登录页;<code>OK</code>正常往下进行 */ public LoginResult afterComplete(HttpServletRequest request, HttpServletResponse response); /** * 在登录验证失败后的操作 * * @param request * @param response * @return <code>Error</code>不管怎么样都会跳转到登录页面,最好别返回<code>LoginResult.OK</code>他也没有用 */ public LoginResult afterFailure(HttpServletRequest request, HttpServletResponse response);
系统缺省通过几个拦截器实现一些功能控制
验证器 | 说明 |
---|---|
com.seeyon.ctp.login.interceptor.VerifyCodeLoginInterceptor | 验证码拦截器,在preHandle对用户输入的验证码进行校验 |
com.seeyon.ctp.login.interceptor.LockLoginInterceptor | 锁定用户拦截器 |
com.seeyon.ctp.login.interceptor.IpcontrolLoginInterceptor | IP控制拦截器 |
com.seeyon.ctp.login.interceptor.MutilBrowserLoginInterceptor | 限制管理员只能使用PC,通过IE登录 |
可以通过以下步骤实现登录拦截:
-
继承com.seeyon.ctp.login.AbstractLoginInterceptor,实现自己的登录拦截器类
package com.seeyon.apps.login; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.seeyon.ctp.common.constants.LoginConstants; import com.seeyon.ctp.login.AbstractLoginInterceptor; import com.seeyon.ctp.login.LoginAuthenticationException; public class CustomMutilBrowserLoginInterceptor extends com.seeyon.ctp.login.AbstractLoginInterceptor { public CustomMutilBrowserLoginInterceptor() { } //管理员只能通过IE、PC访问 public LoginResult afterComplete(HttpServletRequest request,HttpServletResponse response) { User currentUser = CurrentUser.get(); if(currentUser.isAdmin()) { Boolean A8Allow4Admin = (Boolean)(BrowserFlag.A8Allow4Admin.getFlag(request)); //管理员只能从IE上登录 if (Boolean.FALSE.equals(A8Allow4Admin)) { return LoginResult.ERROR_IPCONTROLIPAD; } //管理员不能从M1上登录 if(currentUser.isFromM1() || Constants.login_useragent_from.mobile.name().equals(currentUser.getUserAgentFrom())){ return LoginResult.ERROR_ForbiddenAdminLogin; } } return LoginResult.OK; } }
-
注册Spring bean
在插件的springxml文件中,增加
<bean class="com.seeyon.apps.login.CustomMutilBrowserLoginInterceptor"/>