sprintboot-learn(四)

请求转发被Shiro拦截:

出自项目ch-pc_client(党建微信客户端):css

项目使用freemaker模板:(这里的第三个接口不是请求转发,请求转发在后边写得有)html

这三个接口都是返回html页面,实际上这里的html并非freemaker模板,只是由于放在了模板文件夹里面而被当成了模板来处理。模板的路径为WEB-INF/views/浏览器

资源文件夹有三个,statics,modules,partPcBuild.微信

partPcBuild这个文件夹是后来添加的,主要为何要加这个。测试

Shiro的拦截里面modules/**=anonui

当partPcBuild没有配置成资源文件时。url

测试spa

①咱们访问接口/modules/partPcBuild/index.html的时候走得接口是modules/{module}/{url}.html3d

我这个时候因为modules/**是被放开的,因此访问不会出任何问题。htm

②咱们在”/”这个接口中若是使用的是redirect。那么其实也就跟①的方式同样,是没有任何问题的。

③当咱们使用forword

或者直接如图的接口返回index页面的时候,就会出问题了,页面标题有了,可是页面上空白的,页面访问的时候错误以下:

为何会出现这个状况?错误信息出现了login.html.

咱们来看错误信息:

大概意思是这个:资源是一个stylesheet,可是请求到的倒是一个页面”http://.../login.html”.

意思就是在请求资源的时候被shiro拦截了,返回了login.html.

④这个时候咱们尝试放开shiro的拦截,/**=anon,出现了新的错误:

Js,css找不到了。

为何重定向能访问到,请求转发缺访问不到?

缘由是这样的:

①请求资源的时候使用的时浏览器上显示的路径来取的资源(④出现的问题,资源请求不到),请求转发时,因为请求路径没有改变,因此请求资源的直接被shiro拦截掉了,请求到的是一个login页面(③出现的问题)

所以咱们须要作的事是:

①这里将PC端的文件夹直接设置为根目录映射,这样/js,/css就能够直接访问到partPcBuild文件夹下的资源了(解决了问题④)

②放开shiro对/js,/css等静态资源的拦截。

当把partPcBuild配置成资源文件夹,shiro放开对静态资源的拦截时:测试经过。

上面的测试,只是验证了请求转发请求资源时使用的是浏览器上的url。

请求转发时浏览器上url1不会改变,而获取静态资源的时候取的路径是浏览器上的url,访问的页面是转发后的页面url2,可是请求的资源的时候用的是url1.

开发中咱们须要作的事:

咱们总共两步操做:将目标文件夹设置为根/**,shiro放开对此路径下的资源文件的拦截。

 

over~~~

相关文章
相关标签/搜索