首先我们把单点登录系统所需要的静态资源文件放到taotao-sso-web工程当中,你可能要问了,这些静态资源文件要怎么获取呢?你大可以从我下面给出的百度网盘下载链接地址中进行下载。
链接:https://pan.baidu.com/s/1GkAsPCHFwlnA69V39-VdUQ,提取码:62q3
下载下来之后解压即可,而且记得要将css、js、images放到webapp目录下,将jsp目录放到WEB-INF目录下哟!
由于taotao-sso-web工程的web.xml文件当中配置的拦截形式是/
(如下图所示),所以这也就意味着它会拦截所有的请求,包括我们的静态资源文件,我们直接访问的话就会报404错误(找不到资源的错误)。
可能有些小白跟我一样,对拦截请求不明白,之所以有拦截器就是为了系统的安全,把一些认为不安全的请求给过滤掉,以/
拦截的话会把所有请求都拦截住,也就是说所有的请求都要经过严格的检查,如果被拦截下来的请求在系统中找不到对应的资源或方法来响应的话,那么就会出现404的错误。我们见过以*.html
为过滤条件的情景,这种情况下只有.html
结尾的请求才会被拦截,其它请求不会被拦截。
那么小白们可能会提出这样一个问题,既然所有请求都被拦截了,那么为何我们可以访问Controller中的方法呢?这是由于我们是以Restful的形式来访问Controller中的方法的,请求被拦截后,发现Controller中刚好有定义好的请求规则满足要求,于是就会允许我们访问Controller中的该方法,如果稍微与Controller中所定义的请求规则不一致,那么就会报404的错误。同理,我们访问静态资源,请求被拦截后,如果没有规则告诉SpringMVC我们要访问的静态资源在哪里的话,那么也会报404的错误,也就是说总得有个人告诉我我要访问的资源放在哪儿吧(就像Controller那样,告诉请求,我这儿定义好了很多规则,如果你满足我的规则条件,那么我就让你访问,否则免谈)!只把请求拦截下来,啥也不告诉它,它就蒙圈了,不知道要怎么访问了。
为了解决静态资源被拦截而无法访问的问题,我们在springmvc.xml文件中配置下资源映射(其实就相当于制定好了访问规则),如下图所示,我们之所以只配置了css、images以及js的资源映射而没有配置jsp的映射,是由于我们并不会直接去访问jsp资源文件,而是会经过Controller中的方法返回逻辑视图,通过逻辑视图去springmvc.xml文件中的视图解析器配置当中去匹配要访问的资源文件,视图解析器会自动帮我们在返回的逻辑视图后面加上.jsp
,而且指定路径就在/WEB-INF/jsp目录下,因此我们的jsp文件一定要放在WEB-INF下(除非你配置的视图解析器的位置是别的目录)。
下面我们便通过Controller中的方法来访问我们的登录和注册页面。首先我们要在taotao-sso-web工程的com.taotao.sso.controller包中新建一个PageController类,如下图所示,该Controller中的方法返回的逻辑视图可不是随便写的,而是要与我们的jsp目录下的注册页面(register.jsp)和登录页面(login.jsp)去掉.jsp
后的名字一致,这样返回的register和login逻辑视图便会去springmvc.xml文件内的视图解析器中找到要访问的资源文件的目录并且视图解析器自动给它俩加上.jsp
从而变成了register.jsp和login.jsp,从而也就可以访问到WEB-INF目录下面的静态页面了。
接下来我们便测试下是否能正常访问到登录和注册页面,首先要启动Zookeeper注册中心和Redis服务器,然后启动taotao-sso(若已经启动了,则不用动)和taotao-sso-web这俩工程(如果原来taotao-sso-web工程处于启动状态,那么需要重启),启动成功后,我们先来访问下注册页面,即在浏览器地址栏中输入http://localhost:8088/page/register
进行访问,可以看到如下图所示的界面。
再来访问下登录页面,即在浏览器地址栏中输入http://localhost:8088/page/login
进行访问,可以看到如下图所示的界面。