美文网首页互联网科技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