JAVA-WEB登录验证工具框架Filter版本

背景:

登录验证其实是一个说容易很容易,说复杂很复杂的东西,用户名密码登录,服务端和客户端分别存个状态,加上映射关系,每次查询一下就可以。

java初学者有什么不懂的可以问我,一起来学习!——我刚整理了一套2018最新的0基础入门教程和进阶教程,无私分享,加裙四九二一七三四八二, 即可获取,内附:开发工具和安装包,以及系统学习路线图。

但是我们想做的是一个通用可扩展的工具框架,也谈不上框架,太大。只是个人想法的一个小实践

1、比如你刚开始构建系统,想简单点,登录信息就存session吧,每次校验从请求request中获取session,然后取相关信息check一下。

2、突然一天发现内存不够了,怎么办 存数据库吧,磁盘够用,这时候去改一下check的代码然后发布一下。

3、慢慢系统请求量太大,数据库性能不行,存redis把,继续改check逻辑,然后发布。

这样频繁修改登录验证逻辑,如果出现故障,怎么办,代码回滚,找回原来的代码,改回去。

有人说这样改有什么问题吗?回答当然没问题。但是不够优雅,不是漂亮的设计。

我想做什么:

1、我们是一个开源博客系统,任何人都可以部署,但每个人的环境不一样,我们必须要让他可以将博客系统与他们的用户体系进行集成,这就要求具备扩展性,A公司扩展一个http接口查询他们的用户及登录信息,B公司扩展一个dubbo接口查询他们的用户及登录信息。而不是让他们修改源码,那他还要读懂过于复杂。

2、JAVA设计讲究开闭原则,对修改关闭,对扩展开放。所以我们要做的是可扩展,而不是可修改。

实现思路:

1、 一个Filter过滤器,注入一个接口的实现类,该类提供了从请求上下文获取参数,并验证是否登录的结果,

2、 Filter通过这个结果:已登录:继续执行,未登陆:抛出未登陆异常

具体实现:

前几张一直再说面向接口编程,本次继续这个思路,在工具包里我们设计一个接口,接口AuthChecker,提供三个方法,

登陆后操作:postLogin,登陆后将用户信息记录,返回token(和本文没有太大相关性)

退出后操作:postLogout 退出后根据token,清理相关信息(和本文没有太大相关性)

是否已登录:isLogin 是否登录,参数是请求request,返回boolean

AuthFilter实现:

java初学者有什么不懂的可以问我,一起来学习!——我刚整理了一套2018最新的0基础入门教程和进阶教程,无私分享,加裙四九二一七三四八二, 即可获取,内附:开发工具和安装包,以及系统学习路线图。

AuthFilter实现Filter接口,其中两个参数,一个是AuthChecker接口,一个是excludeUrls

AuthChecker 为用户实现,注入即可。

excludeUrls 是例外url,也就是这些url不需要登录校验

红色箭头方向为调用AuthChecker的isLogin方法,返回false则抛出异常,中断请求

Filter实现

Spring集成

实现AuthChecker接口,并加上注解,交给spring管理。就是个普通的spring管理的bean,可执行任何操作,查询数据库,调用httpclient,dubbo,哪怕直接返回false。

接口实现类

Filter当然需要与spring集成,交给spring管理,完成接口实现类的注入和例外url的配置

filter与spring集成配置

web.xml配置过滤器,交给spring的代理执行,注意名字保持一致

java初学者有什么不懂的可以问我,一起来学习!——我刚整理了一套2018最新的0基础入门教程和进阶教程,无私分享,加裙四九二一七三四八二, 即可获取,内附:开发工具和安装包,以及系统学习路线图。

过滤器配置

好截止到现在这个工具小框架就搞定了,代码,配置,使用。

当你有一天想要更换校验方式,重新写一个实现类,修改与spring集成配置中注入的类即可,哪怕出现问题也可以修改下配置重启服务就能解决,而不用修改代码。

使用者只需要关注从请求上下文获取信息,进行登录与否的校验即

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180331A0OHP400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券