文档中心 > API文档

1.9.2. 登录认证拦截LoginInterceptor

对登录认证进行拦截

典型应用场景如下:

  • 记录登录审计日志

  • 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登录

可以通过以下步骤实现登录拦截:

  1. 继承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;
         }
     }
  2. 注册Spring bean

    在插件的springxml文件中,增加

        <bean class="com.seeyon.apps.login.CustomMutilBrowserLoginInterceptor"/>