后端实体类
- Entity:实体,通常和数据库中的表对应。
- DTO:数据传输对象,通常用于程序中各层之间传递数据(大量使用)。
- VO:视图对象,为前端展示数据提供的对象(大量使用)。
- POJO:普通Java对象,只有属性和对应的getter和setter。
JWT( Json Web Token )
JWT是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。简单点说就是一种认证机制,让后台知道该请求是来自于受信的客户端。
回顾一下基于token
的用户身份认证流程:
1.客户端使用用户名和密码请求登录。
2.服务端收到请求,验证用户名和密码。
3.验证成功后,服务端会签发一个token
,再把这个token
返回给客户端。
4.客户端收到token
后可以把它存储起来,比如放到cookie
中。
5.客户端每次向服务端请求资源时需要携带服务端签发的token
,可以在cookie
或者header
中携带。
6.服务端收到请求,然后去验证客户端请求里面带着的token
,如果验证成功,就向客户端返回请求数据。
这种基于token
的认证方式相比传统的session
认证方式更节约服务器资源,并且对移动端和分布式更加友好。其优点如下:
- 支持跨域访问:
cookie
是无法跨域的,而token
由于没有用到cookie
(前提是将token
放到请求头中),所以跨域后不会存在信息丢失问题。 - 无状态:
token
机制在服务端不需要存储session
信息,因为token
自身包含了所有登录用户的信息,所以可以减轻服务端压力。 - 更适用CDN:可以通过内容分发网络请求服务端的所有资料。
- 更适用于移动端:当客户端是非浏览器平台时,
cookie
是不被支持的,此时采用token
认证方式会简单很多。 - 无需考虑CSRF:由于不再依赖
cookie
,所以采用token
认证方式不会发生CSRF,所以也就无需考虑CSRF的防御。
JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token
,并且这个JWT token
带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。JWT的认证流程如下:
1.前端通过Web表单将自己的用户名和密码发送到后端的接口,这个过程一般是一个POST
请求。建议的方式是通过SSL加密的传输(HTTPS)。
2.后端核对用户名和密码成功后,将包含用户信息的数据作为JWT的Payload
,将其与JWT Header
分别进行Base64编码拼接后签名,形成一个JWT Token
,形成的JWT Token
就是一个如同lll.zzz.xxx
的字符串。
3.后端将JWT Token
字符串作为登录成功的结果返回给前端。前端可以将返回的结果保存在浏览器中,退出登录时删除保存的JWT Token
即可。
4.前端在每次请求时将JWT Token
放入HTTP请求头中的Authorization
属性中(解决XSS和XSRF问题)。
5.后端检查前端传过来的JWT Token
,验证其有效性,比如检查签名是否正确、是否过期、token
的接收方是否是自己等等。
6.验证通过后,后端解析出JWT Token
中包含的用户信息,进行其他逻辑操作(一般是根据用户信息得到权限等),返回结果。
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
方向代理的好处:
- 提高访问速度
- 进行负载均衡
- 保证后端服务的安全
MD5算法
MD5信息摘要演算法(Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。
SpringBoot简单集成Redis
导入Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件编写
spring:
redis:
host: ${host}
port: ${port}
password: ${password}
database: ${database}
编写Redis配置类
/**
* @author LoungeXi
* @description Redis配置类
*/
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
// 设置redis连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
基本使用
在要使用的类中利用@Autowired
注解注入RedisTemplate
对象后即可调用其 opsOfXXX() 方法来对各种基本的数据类型进行操作。