美文网首页互联网科技JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统
资深CV程序员,差点被这个小需求强行“拦截”,幸好有Git帮忙

资深CV程序员,差点被这个小需求强行“拦截”,幸好有Git帮忙

作者: java架构师联盟 | 来源:发表于2020-10-06 13:47 被阅读0次

    常在河边走,哪有不湿鞋,这不,开发多年的程序员一小支,因为偷懒,直接使用CV大法,国庆期间,指导亲戚家小朋友做课设的时候,让一个小小的拦截器迷了眼睛,看着大外甥迷离(怀疑)的眼神,我想,最蛋疼的莫过于这个时刻

    他的课设中的问题需求很简单,就是希望在未登录状态时,不能访问其他页面,只能访问登录页

    这个开发需求难吗?​我刚听到这个问题的时候,我大手一挥,小case。这还不简单,在该项目中添加拦截器不就轻轻松松实现了啊。

    首先新建一个interceptor拦截器。

    packagecom.qust.shbz.interceptor;

    importjavax.servlet.http.HttpServletRequest;

    importjavax.servlet.http.HttpServletResponse;

    importorg.springframework.web.servlet.HandlerInterceptor;

    importorg.springframework.web.servlet.ModelAndView;

    importcom.qust.shbz.log.entry.LogUser;

    /**

    * 配置拦截器,拦截未登录用户

    *@authorbws

    *@version2020年10月4日

    *@since1.0

    */

    publicclassLoginInterceptorimplementsHandlerInterceptor{

    @Override

    publicvoidafterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)

    throwsException{

    //执行完毕,返回前拦截

    }

    @Override

    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)

    throws Exception {

    //处理过程中执行拦截

    }

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {

    //在拦截点执行前拦截,如果返回true则不执行拦截点后的操作(拦截成功)

    //返回false则不执行拦截

    if(LogUser.getTyshxym() == null || LogUser.getTyshxym() == "") {

    //登录失败,跳转到登录页

    response.sendRedirect(request.getContextPath());

    return false;

    }else{

    //登陆成功,不拦截

    return true;

    }

    }

    }

      在上面的拦截器代码中,LogUser.getTyshxym()是自己要判断的用户名什么的,也可以放在session里。即登录之后,用户名放到session里。若session里面有用户名,则已登录,不需要拦截。若session里没有该用户名,则需要重定向到登录页。

      然后还需要在springmvc.xml配置文件里配置拦截器。

    <!-- 配置拦截器 -->

    <!-- 拦截所有ywjb目录下面的页面 -->

    <!-- mvc:exclude-mapping是另外一种拦截,它可以在你后来的测试中对某个页面进行不拦截,这样就不用在

    LoginInterceptor的preHandler方法里面获取不拦截的请求uri地址了(优选) -->

      注意:<mvc:mapping path="/**"/>这里如果拦截所有资源的话,会把css等静态资源都拦截到,建议只拦截相应的html或者jsp页面。<mvc:exclude-mapping path="/" />这里是配置不需要拦截的地址。由于我的登录页是根目录,所以根目录不拦截。<bean class="com.qust.shbz.interceptor.LoginInterceptor"></bean>这个就是你第一步创建的拦截器了。

    ​难吗?实现了之后我只想说一句,星星你个星星,但是,真的,实现的时候我以为就是简简单单的手打了,最后还是请教了我的外援---Git仓库,也幸好,我之前有整理这些小的功能实现的习惯,​不然。。。要是一阵疯狂百度,那我想我的“光辉伟岸”的形象也就基本不存在了

    也希望大家在平时的工作或者学习的过程中,如果不涉及公司机密的情况下,可以将一些小的Demo模块提取出来,作为自己的模板,天知道会在什么时候就能用得到

    —END—

    你点的每个关注,我都认真当成了喜欢

    关注公众号:Java架构师联盟,每日更新技术好文

    相关文章

      网友评论

        本文标题:资深CV程序员,差点被这个小需求强行“拦截”,幸好有Git帮忙

        本文链接:https://www.haomeiwen.com/subject/wqdtpktx.html