实际上SpringBoot是可以结合JSP使用的,不过需要加上providedRumtime("org.apache.tomcat.embed:tomcat-embed-jasper")
作为JSP解析器。然而使用了JSP特性页面可能会出现编译错误,这个时候SpringBoot显示出来的是404。
Thymeleaf的直接取值表达式是[[${val}]]
。
验证登录的时候,最好使用@{/login}
获取Spring Security的登录地址,不然登录似乎会失败。
Thymeleaf需要从application.properties
一类配置文件中读取数据的时候,传统方法是先使用@Value{key.name}
注入到对应类型的变量中,然后再用MVC的Model
的addAttribute()
方法设置后传给对应的模板。
退出登录也要POST方法。
登陆/退出(默认URLlogin
/logout
)成功后自动跳转的方法名分别为defaultSuccessUrl
和logoutSuccessUrl
。其中defaultSuccessUrl
有第二个选填参数表示是否永远跳转至该页面。
别想着明文密码存储了,Spring Security 5删除了PlaintextPasswordEncoder
,现在基本上都是用BCrypt,到网上随便找一个BCrypt加密工具来生成测试账户的密码吧。(或者用AuthenticationManagerBuilder.withUser
直接在代码里也行,这里可以用明文)
可以通过重写UserDetails
、UserDetailsService
来重定向登陆所用的用户信息类到自己想要的方式。比如写一个连接数据库的Entity
,加上jdbcAuthentication()
(说实话,这个真的有必要吗),就可以实现从数据库中获取登录信息。进行鉴权处理的是Authentication
类,所需要的UserDetails
信息是约定俗成 的username
和password
两个属性,其中password
是存在数据库中的、使用约定 (可以设置)的加密方式加密后的串。(不记得从哪看来的了,说是spring的原则是约定高于配置 )
参考:https://www.baeldung.com/spring-security-authentication-with-a-database 以及附带的github代码
如果在post表单里用了th:object
的话,在对应的Controller方法中要用@ModelAttribute(modelName)
获得。
Kotlin的foreach用的是大括号,可以使用it
获取当前次循环正使用的元素。
若是对RequestMapping
方法中,有javax.validation
验证限制的对象使用@Valid
注解的话,可以按照预期检查出错误来,但是由于validation本身发生在进入方法体之前,方法本身并不会被执行。需要使用ExceptionHandler
来捕获异常,若是对数据传输对象Data Transfer Object, DTO
使用@Valid
的话,会产生org.springframework.validation.BindException
(噗,stackoverflow上有个老哥 写成了java.net.BindException
)
Kotlin会给方法自动生成getter和setter,但是仅仅是作用和Java中的一样,并不能通过getXXX()
方法来访问属性= =
Kotlin通过反射调用方法有点麻烦,可以绕道Java,通过::class.java.getMethod().invoke()
实现等效的功能。
Thymeleaf在使用@{}
生成链接地址的时候,可以通过特殊的方式 生成含变量的路径,格式形如@{/path/{key}(key=${val})}
会生成/path/${val}
形式的地址。
URL作为变量要用@PathVariable
而不是@PathParam
。以及为了防止万一,最好传入封装类型而不是基本类型。
可以使用th:checked
属性设置输入复选框的初值。
标签: none