Spring Security 加密密码

明文保存密码是不可取的,可以使用 SHABCrypt 等对密码进行加密。

BCrypt 算法与 MD5/SHA 算法有一个很大的区别,每次生成的 hash 值都是不同的,就可以免除存储 salt,暴力破解起来也更困难。BCrypt 加密后的字符长度比较长,有60位,所以用户表中密码字段的长度,如果打算采用 BCrypt 加密存储,字段长度不得低于 68(需要前缀 {bcrypt})。

下面的代码展示怎么使用 BCrypt 进行加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.junit.Test;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

public class EncryptPassword {
@Test
public void encrypt() {
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

for (int i = 0; i < 5; ++i) {
// 每次生成的密码都不一样
String encryptedPassword = passwordEncoder.encode("Passw0rd");
System.out.println(encryptedPassword);
System.out.println(passwordEncoder.matches("Passw0rd", encryptedPassword)); // true
System.out.println(passwordEncoder.matches("Password", encryptedPassword)); // false
}
}
}

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$2a$10$l7vPVeqwb9GiVjURV5J2QO1CM5qxwk00/Ra5qEog0WgP7O5XV0Ble
true
false
$2a$10$jeyMfHF88mNJb9v.mQ7YiuZ8oTU.pHaiKdT1NLOM38eXj7heHZHg2
true
false
$2a$10$ux43/3JcHUC1hszyoJaH0eQhv7LkIVfL7p1cW80WxfxeTr2dUY6kO
true
false
$2a$10$KdUmhaJOJ30klEcKiYT25.fIRPrMs4xONHOQh4JvmpKSjJ8d9.QKG
true
false
$2a$10$gQKUOoFuevnCkoej3.AvAO9YzHKCKYmKuiSfEGHL22piY2FfNDQYu
true
false

随意取其中任意一个都可以,因为每次生成都是不一样的,所以取第一个就可以了。

Spring Security 用户信息数据源

前面章节中用户名、密码、权限都是写在配置文件里的,不能动态的管理用户的权限,大多数时候显然是不行的。这里介绍从其他数据源读取用户的信息,例如从数据库,LDAP 等。只需要给 authentication-provider 提供接口 UserDetailsService 的实现类即可,使用这个类获取用户的信息,涉及以下内容:

  • 修改 spring-security.xml 中的 authentication-provider
  • 类 UserDetailsService 实现了 Spring Security 的接口 UserDetailsService
  • 类 User
  • 类 UserService

Spring Security 入门

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├── main
│   ├── java
│   │   └── com
│   │   └── xtuer
│   │   └── controller
│   │   └── HelloController.java
│   ├── resources
│   │   └── config
│   │   ├── spring-mvc.xml
│   │   └── spring-security.xml
│   └── webapp
│   └── WEB-INF
│   ├── view
│   │   └── fm
│   │   ├── admin.htm
│   │   └── hello.htm
│   └── web.xml
└── test
├── java
└── resources

Spring Security 入门

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
├── build.gradle
└── src
├── main
│   ├── java
│   │   └── com
│   │   └── xtuer
│   │   └── controller
│   │   └── HelloController.java
│   ├── resources
│   │   ├── config
│   │   │   ├── application-servlet.xml
│   │   │   └── spring-security.xml
│   │   └── logback.xml
│   └── webapp
│   └── WEB-INF
│   ├── page
│   │   ├── admin.html
│   │   └── hello.html
│   ├── static
│   │   ├── css
│   │   ├── img
│   │   ├── js
│   │   └── lib
│   └── web.xml
└── test
├── java
└── resources

Spotlight 快捷键

  • ⌘+D: 快速查字典
  • ⌘+L: 直接在 Spotlight 浏览名词解释
  • ⌘+B: 打开浏览器,在网页上搜索
  • ⌘+R: 打开档案所在的文件夹
  • ⌘+i: 查看档案详细信息

Mac 开发者软件推荐

下面列举一些 Mac 下开发者可能常用到的软件,大多数都是免费的,某些收费的软件同时提供了免费版,其功能大多时候也能够满足常用需求。

Homebrew

Homebrew 简称 brew,是 Mac OSX 上的软件包管理工具,能在 Mac 中方便的安装软件或者卸载软件,可以说 Homebrew 就是 Mac 下的 apt-get、yum 神器,安装软件只需要一个命令。

Homebrew 主页为 https://brew.sh/index_zh-cn.html,安装 Homebrew 只需要在终端执行下面的 Ruby 代码即可:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

常用命令可参考 http://qtdebug.com/mac-homebrew

Mac Homebrew

Homebrew 可以很方便的通过终端安装许多软件,例如 Tomcat,Redis,Gradle,Tree 等,和 Ubuntu 下的 apt-get 很像,下面列出一些 Homebrew 常用命令,以安装 tomcat 为例。

CentOS 7 简单使用

下载 CentOS

访问 https://www.centos.org/download/ 下载 Minimal ISO 即可,其他的虽然功能齐全,但是太大了。

必要工具

  • yum install zip unzip -y:

    1
    2
    3
    4
    5
    # 把文件夹 H5 和文件 x.html 压缩成 result.zip
    zip -r result.zip H5 x.html

    # 解压 filename.zip, 如无 -d 则解压到当前目录,有则解压到目录 dest-directory
    unzip filename.zip [-d dest-directory]
  • yum install bzip2 (解压 .bz2 文件)

  • yum install net-tools (安装后才能使用 ifconfig 等)
  • tar 解压 tar.gz: tar xf filename.tar.gz
  • 安装 tree: yum install tree
  • 安装 7z: yum install -y p7zip,如果不能用 yum 安装,可以自己编译

    1
    2
    3
    4
    5
    wget http://nchc.dl.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2
    tar -jxvf p7zip_9.20.1_src_all.tar.bz2
    cd p7zip_9.20.1
    make
    make install
  • 安装 VIM (默认只安装了 VI,不能高亮搜索,不能语法高亮等)

    • 查看本机是否已经安装 VIM: rpm -qa | grep vim

      1
      2
      3
      vim-minimal-7.4.629-5.el6.x86_64
      vim-enhanced-7.4.629-5.el6_8.1.x86_64
      vim-common-7.4.629-5.el6_8.1.x86_64

      如果安装了则会显示上面 3 个包,缺少了的需要进行安装:

      • 缺少 vim-common: yum -y install vim-common
      • 缺少 vim-minimal: yum -y install vim-minimal
      • 缺少 vim-enhanced: yum -y install vim-enhanced

Java 解压 zip 文件

使用 Apache commons-compress 解压 zip 文件是件很幸福的事,可以解决 zip 包中文件名有中文时跨平台的乱码问题,不管文件是在 Windows 压缩的还是在 Mac,Linux 压缩的,解压后都没有再出现乱码问题了。

Java 访问 Redis

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API,和 Memcached 类似,它支持存储的 value 类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set – 有序集合)和 hash(哈希类型)。

Gradle Tips

依赖的 Scope

  • compile (使用 implementation 替代,提高编译速度)
  • runtime
  • compileOnly (新版才支持,就是 provided)
  • testCompile (使用 testImplementation 替代)
  • testRuntime

Hexo 环境搭建

使用 Hexo 来搭建自己的个人静态博客:

  1. Markdown 写博客
  2. Hexo 生成 HTML
  3. Hexo 发布 HTML 到 Github Pages

既然是静态博客,那么就没有后台了,留言功能可以使用第三方的服务,例如畅言。

All Documents

Ajax

Cas

DB

FE

Gradle

Hexo

Index

Java

Mac

Misc

PHP

Qt

QtBook

Redis

SemanticUi

Spring

SpringBoot

SpringCore

SpringMVC

SpringSecurity

SpringWeb

Util

Vue

zTree

Spring Core

Spring IoC

Spring AOP

Scheduler