springBoot2集成shiro及springBoot相关目录介绍

前段时间,花了大概三天,把我的小项目集成了shiro,刚开始我以为会很简单,毕竟springBoot可谓是开发神器啊,但是在理论与实践的突突中,难免会遇到遇到一些让人捶胸顿足的情景。
很幸运,我就踩了一些知识匮乏的坑,记录下部分,以示后猿。

主要问题记录

  • 在集成shiro之后的登录测试中,shiro拦截器生效,但是没有调用登录验证的doGetAuthenticationInfo()方法
  • 登录成功之后跳转到了一些js跟css文件页面或者是跳转到了spring的绿色图标
  • 登录之后跳转到Whitelabel Error Page,Request method ‘POST’ not supported,405错误
  • 认知不足所遇到的springBoot下static与templates目录的一些坑

先来说下springBoot的templates目录跟static目录吧。
在sb的web目录中,相对于ssm架构改变了一些目录,个人现在所认知到的,主要就体现在templates跟static目录中。
static:这个目录主要是存放一些静态资源,主要包括相关的js与css。该文件夹下的目录能够被直接访问到,且没有文件前缀,/static/demo.png相当于localhost:8080/demo.png。一开始纯粹的我以为这个是用来存放html静态页面的,然后templates是用来存放jsp等动态页面的,事实上,并不是,你要这样子理解,对于springBoot本身来说会造成一些麻烦。
templates:这个目录主要是用来存放一些动态资源的,并且该文件夹下的资源不能够被直接访问到,/templates/index.html这个页面是不能够被localhost:8080/templates/index.html直接访问到的,你只能通过后台的转发才能访问到相关的资源,并且你需要添加一些别的依赖来解析这个页面,同时也要做相关的配置,如下:

		
		
			org.springframework.boot
			spring-boot-starter-thymeleaf
		
		
		
			net.sourceforge.nekohtml
			nekohtml
			1.9.22
		

除以上添加的依赖,你还要在application.properties中做以下配置

#thymeleaf start
spring.thymeleaf.prefix=classpath:/templates/
Thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
#使thymeleaf解析html模板不至于那么严谨
#spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.content-type=text/html
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf end

然后你的目录结构就变成这样了
springBoot2集成shiro及springBoot相关目录介绍_第1张图片
这些其实是对集成shiro的一些准备工作,不然会有些麻烦。

接下来可以来集成shiro了,参考这个链接就好,这位大神很厉害啊。
纯洁的微笑:http://www.ityouknow.com/springboot/2017/06/26/springboot-shiro.html

到这里你就可以完成基本的集成了,但是,可能还会有一些问题。

  • 在集成shiro之后的登录测试中,shiro拦截器生效,但是没有调用登录验证的doGetAuthenticationInfo()方法
  • 登录成功之后跳转到了一些js跟css文件页面或者是跳转到了spring的绿色图标
  • 405错误,如下图:
    springBoot2集成shiro及springBoot相关目录介绍_第2张图片

第一个问题,大致原因是你的登录form表单,提交的是get的请求方式,或者form里的action设置不为空,其实shiro会主动拦截POST请求,所以你的请求方式最好是POST,还有你的项目的目录结构有问题,也可能引发这个错误。

第二个问题,登录之后跳转到一些乱七八做的css,js或者ico图标页面,这个主要是你在shiro中配置的拦截路径有问题,配置拦截路径要注意:拦截的范围大小是从小到大,如果这样做还不生效,还有问题,可能是你的项目结构有问题,以下是我的目录结构跟拦截规则,仅供参考:
springBoot2集成shiro及springBoot相关目录介绍_第3张图片

		Map filterChainDefinitionMap = new LinkedHashMap();
		// 配置不会被拦截的链接 顺序判断
		filterChainDefinitionMap.put("/favicon.ico", "anon"); //这个是避免登录成功后跳转到spring的绿叶图标上
		filterChainDefinitionMap.put("/adminLTE/**", "anon");
		filterChainDefinitionMap.put("/angularJs/**", "anon");
		filterChainDefinitionMap.put("/base/**", "anon");
		filterChainDefinitionMap.put("/bootstrap/**", "anon");
		filterChainDefinitionMap.put("/img/**", "anon");
		filterChainDefinitionMap.put("/jQuery/**", "anon");
		filterChainDefinitionMap.put("/js/**", "anon");
		//配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
		filterChainDefinitionMap.put("/logout", "logout");
		//:这是一个坑呢,一不小心代码就不好使了;
		//
		filterChainDefinitionMap.put("/**", "authc");
		// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
		shiroFilterFactoryBean.setLoginUrl("/login");
		// 登录成功后要跳转的链接
		shiroFilterFactoryBean.setSuccessUrl("/index");

接下来是最后一个问题,405,这个问题是纠结我最久的一个问题,把我搞得好伤心,怀疑人生那种,至今没有彻底弄明白这个问题。我产生这个问题的大概原因应该可能也许是这两个原因,一是目录结构问题,二是过滤规则问题,你如果也遇到了,不如从这两个地方找找原因,爱莫能助啊。。。。
感谢一下集成时候帮助我的大哥,,,,点赞。

参考链接:
shiro集成
http://www.ityouknow.com/springboot/2017/06/26/springboot-shiro.html
thymeleaf模板解析
https://blog.csdn.net/boywcx/article/details/81362104

你可能感兴趣的:(项目笔记)