JWT单点登录
什么是JWT介绍的比较清楚
https://www.cnblogs.com/yan7/p/7857833.html
JWT的优势和劣势等
https://www.jianshu.com/p/af8360b83a9f
https://www.cnblogs.com/cjsblog/p/9277677.html
注册过程中,密码从前台在传输到后台过程中,如何防止密码被窃取或篡改?
前台通过js加密下,后台通过算法解密,再用后台方式加密,最后放到数据库中
抓包技术。
认证就是判断你有没有权限获取数据
鉴权就是看看你有没有权利操作某个东西
使用密码一般用SHA或者MD5,结合salt(盐)给密码加密,数据库中不会用明文的
Spring Security提供了强哈希方法来给加密密码,这个方法每次加密的结果都不一样,所以使用这个算法来给密码或数据加密传输。
1、先给项目添加依赖
org.springframework.boot
spring-boot-starter-security
2、添加了spring security依赖后,所有的地址都被spring security所控制了,造成请求无法被访问,目前只是需要用到BCrypt密码加密的部分,所以我们要添加一个配置类,配置让所有地址都可以匿名访问。
/**
- 安全配置类
*/
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
//csrf().disable();让csrf拦截技术停止使用,这个技术是个防止除我通过的请求之外的请求攻击我的一种防护,现在需要把这个停止掉
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
3、在启动类中配置bean,这样任何地方都可以autowired使用这个类了,就如同spring配置文件里ioc了某个bean效果一样
@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
4、给密码加密
@Autowired
BCryptPasswordEncoder encoder;
public void testPassword() {
//密码加密
String newpassword = encoder.encode(password);//加密后的密码
system.out.println(newpassword);
}
5、比较密码
@Autowired
BCryptPasswordEncoder encoder;
public void testCompare(String name,password) {
User user = userMapper.findByname(name);
if( user!=null && encoder.matches(password,user.getPassword()))
{
system.out.println(“登录成功”);
}
}
=JWT的使用=====
6、什么是无状态登录?
就是服务器不存登录的状态和数据,每次访问后台的过程中都需要把密码等用户数据全部校验一遍,校验成功才算登录。
这种token认证的有什么好处?
无状态登录的好处是,数据不需要在服务端session或redis中存储,因为Token 自身包含了所有登录用户的信息,每次访问只需要调用解密验证下就可以了,省去了服务器压力,增快了性能。
7、什么是jwt?
JSON Web Token(JWT)是一个非常轻巧的数据规范。这个规范允许我们使用JWT在用户端和服务器之间传递安全