• 018医疗项目-模块一:用户身份校验拦截器的编写


    这个身份拦截器的作用是为了防止用户没有登录,在URL中输入地址就去访问那么系统页面。比如:

    没有拦截器的情况下:

    直接在URL重中输入first.action直接进入到了页面。

    其实不能这样的,我们都没有登录,怎么可以直接进入系统呢。

    我们变成编写的身份验证器实现的就是这么一个效果:输入first.action之后:

     会自动跳转到登录界面。

    下面给出具体的实现:

    我们来给吃具体的实现,想法是,我们自己写一个继承HandlerInterceptor的类,当做拦截器,然后在springmvc配置文件中配置它。

    好的,我接下来给出具体代码:

    package yycg.base.action.HandlerInterceptor;
    
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    import yycg.base.pojo.vo.ActiveUser;
    import yycg.base.process.context.Config;
    import yycg.util.ResourcesUtil;
    /**
     * 
    * @ClassName: LoginInterceptor
    * @Description: 拦截器,主要是拦截用户在没有登录的情况下去访问。需要在springmvc中进行配置。
    * @author A18ccms a18ccms_gmail_com
    * @date 2016年11月17日 下午4:05:28
    *
     */
    /*
     * 
     * 这个拦截器还要在SpirngMvc中配置才可以用的。
     * 
     * 
     * 
     */
    public class LoginInterceptor implements HandlerInterceptor {
    
        
    /**
     * 
     * 执行时间:进入到action方法之前,
     * 使用场景:用于用户的认证,用户的授权拦截。
     * 
     */
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
            
           HttpSession session=request.getSession();
            ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);//从session中取出用户对象,之前已经存入了session了。
    if(activeUser!=null)//说明从Session中取出来用户对象,那么就放行 { return true; } //如果activeUser是空的,那就是说明用户没有登录。那么我们就要检测用户的要浏览的是不是公共的界面,如果是的话,也可以放行。 List<String> open_urls=ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS); //Config.ANONYMOUS_ACTIONS就是资源的名字就是anonymousActions。说明要从这里去取值, //得到用户的url String url=request.getRequestURI(); //遍历资源文件里面是不是包含了我们要访问的那个url.如果包含了,放行。 for(String open_url:open_urls) { if(url.indexOf(open_url)>=0)//>=0说明找到位置了 { return true; //返回true就是继续执行, } } //如果上面的都没哟满足,那么我们就要拦截下来,跳转到用户的登录界面 request.getRequestDispatcher("/WEB-INF/jsp/base/login.jsp").forward(request, response); return false; } /** * 执行的时机:进入到Action方法,在返回modelAndView之前执行。 * 使用场景:在这里统一对返回的数据进行处理,比如统一添加菜单,导航等 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 执行时间:action方法执行完成,已经返回modelAndview,执行 * 使用的场景:统一处理系统异常,在这里统一记录系统日志,监控action的执行的时间,在preHandle记录开始的时间,在afterCompletion记录结束的时间 * * * * */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

    打开springmvc.xml配置文件:

    加入这么一段:

    <mvc:interceptors>
       <mvc:interceptor>
       
          <mvc:mapping path="/**"/>
          <bean class="yycg.base.action.HandlerInterceptor.LoginInterceptor"></bean>
       </mvc:interceptor>
    
    
    </mvc:interceptors>

     这样拦截器就配置好了。

    我们在url里面输入刚才的first.action之后:

    发现:

     说明成功了。

  • 相关阅读:
    完整的UED流程
    curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    部署方案模板
    商城项目合作
    架构师分类
    k8s视图
    虚拟化通信技术
    AxureRP8 实现时间功能
    在AxureRP8中实现广告文字滚动效果
    获取当前网络中的电脑数目及MAC-通过MAC查找IP-通过IP查询机器名
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/6075254.html
Copyright © 2020-2023  润新知