与开发者超时分享用户数据
在这段配置中:
配置完成后,再次登录测试,此时的登录数据就是来自数据库的数据了。 3.优化 前面的 HelloServlet,我们是在代码中手动配置的,要是每个 Servlet 都这样配置,这要搞到猴年马月了~ 所以我们对此可以在 web.xml 中进行手动配置。
首先我们创建一个 AdminServlet 进行测试,如下: 请求到达后,先提取出用户名和密码,然后调用 req.login 方法进行登录,如果登录失败,则跳转到登录页面。 登录完成后,通过获取登录用户信息以及判断登录用户角色,来确保用户是否登录成功。 如果登录成功,就跳转到项目应用首页,否则就跳转到登录页面。
接下来定义 HelloServlet: HttpServletRequest 是一个接口,而 RequestFacade 则是一个正儿八经的 class。 HttpServletRequest 是 Servlet 规范中定义的 ServletRequest,这相当于是标准的 Request;但是在 Tomcat 中的 Request 则是 Tomcat 自己自定义的 Request,自定义的 Request 实现了 HttpServletRequest 接口并且还定义了很多自己的方法,这些方法还是 public 的,如果直接使用 Tomcat 自定义的 Request,开发者只需要向下转型就能调用这些 Tomcat 内部方法,这是有问题的,所以又用 RequestFacade 封装了一下,以至于我们实际上用到的就是 RequestFacade 对象。 那么毫无疑问,HttpServletRequest#login 方法具体实现就是在 Tomcat 的 Request#login 方法中完成的。经过源码追踪,我们发现,登录的数据源是由 Tomcat 中的 Realm 提供的,注意这个 Realm 不是 Shiro 中的 Realm。 Tomcat 中提供了 6 种 Realm,可以支持与各种数据源的对接:
如果这些 Realm 无法满足需求,当然我们也可以自定义 Realm,只不过一般我们不这样做,为啥?因为这这种登录方式用的太少了!今天这篇文章纯粹是和小伙伴们开开眼界。 如果自定义 Realm 的话,我们只需要实现 org.apache.catalina.Realm 接口,然后将编译好的 jar 放到 $CATALINA_HOME/lib 下即可,具体的配置则和下面介绍的一致。 接下来我和大家介绍两种配置方式,一个是 UserDatabaseRealm,另一个是 JDBCRealm。 2.1 基于配置文件登录
我们先来定义一个 LoginServlet: (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |