请求转发被Shiro拦截:
出自项目ch-pc_client(党建微信客户端):
项目使用freemaker模板:(这里的第三个接口不是请求转发,请求转发在后边写得有)
这三个接口都是返回html页面,实际上这里的html并不是freemaker模板,只是因为放在了模板文件夹里面而被当成了模板来处理。模板的路径为WEB-INF/views/
资源文件夹有三个,statics,modules,partPcBuild.
partPcBuild这个文件夹是后来添加的,主要为什么要加这个。
Shiro的拦截里面modules/**=anon
当partPcBuild没有配置成资源文件时。
测试
①我们访问接口/modules/partPcBuild/index.html的时候走得接口是modules/{module}/{url}.html
我这个时候由于modules/**是被放开的,所以访问不会出任何问题。
②我们在”/”这个接口中如果使用的是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~~~
来源:oschina
链接:https://my.oschina.net/u/3298044/blog/2244953