SpringMVC 中提供了多种数据绑定,可以把请求中的数据绑定为简单类型,简单数组,对象,对象的数组等。
大圣,此去欲何?踏南天,碎凌霄。若一去不回……?便一去不回!
在 IDEA 里删除 Gradle Module,最简单的方法是从 Gradle projects
视图里删除,一次就能删除干净,从 Project
视图或者 Project Structure
中都不能一次删除干净。
1: First run /usr/libexec/java_home -V which will output something like the following:
Matching Java Virtual Machines (2):
1.8.0_25, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
1.7.0_75, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
2: Pick the version you want to be the default (1.7.0_75 for arguments sake) then:
export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_75`
3: Now when you run java -version you will see:
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)
4: Just add the above export JAVA_HOME … line to your shell’s init file(
Redis 有很多可视化的客户端,如用 Qt 实现的,跨平台的 Redis Desktop Manager
,这里介绍的是 Node 实现的 Redis-Commander
。
使用 JDK 自带的 UrlConnection
也能访问网络资源,但是要处理 SSL,Cookie,Proxy 等时编码就会很麻烦,Apache HttpClient
的功能非常强大,封装了很多操作,使用简单,能很方便的访问网络资源,其示例代码中有很多有用的例子,下载地址为 http://hc.apache.org/downloads.cgi
集群的关键点是 session 共享,这里使用 spring-session-data-redis
把 session 存储到 Redis 实现集群里 session 的共享,全是配置,不需要修改一行 Java 代码就能实现 Session 的集群共享。
如果启用了 Remember Me
,登录后重启浏览器访问 http://localhost:8080/admin 就不需要重新登录了。
明文保存密码是不可取的,可以使用 SHA
,BCrypt
等对密码进行加密。
BCrypt 算法与 MD5/SHA 算法有一个很大的区别,每次生成的 hash 值都是不同的,就可以免除存储 salt,暴力破解起来也更困难。BCrypt 加密后的字符长度比较长,有60位,所以用户表中密码字段的长度,如果打算采用 BCrypt 加密存储,字段长度不得低于 68(需要前缀 {bcrypt}
)。
下面的代码展示怎么使用 BCrypt 进行加密:
1 | import org.junit.Test; |
输出:
1 | $2a$10$l7vPVeqwb9GiVjURV5J2QO1CM5qxwk00/Ra5qEog0WgP7O5XV0Ble |
随意取其中任意一个都可以,因为每次生成都是不一样的,所以取第一个就可以了。
前面章节中用户名、密码、权限都是写在配置文件里的,不能动态的管理用户的权限,大多数时候显然是不行的。这里介绍从其他数据源读取用户的信息,例如从数据库,LDAP 等。只需要给 authentication-provider
提供接口 UserDetailsService
的实现类即可,使用这个类获取用户的信息,涉及以下内容: