postman请求头加密_密码加密与微服务鉴权JWT

postman请求头加密_密码加密与微服务鉴权JWT
博客学习⽬标
1、⽤户注册时候,对数据库中⽤户的密码进⾏加密存储(使⽤ SpringSecurity)。
2、使⽤ JWT 鉴权认证。
⼀、BCrypt 密码加密
1、常见的加密⽅式
任何应⽤考虑到安全,绝不能明⽂的⽅式保存密码。密码应该通过哈希算法进⾏加密。 有很多标准的算法⽐如SHA或者MD5,结合salt(盐)是⼀个不错的选择。 Spring Security 提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接⼝使⽤
BCrypt强哈希⽅法 每次加密的结果都不⼀样。
BCrypt强哈希⽅法来加密数据库中⽤户的密码。 BCrypt强哈希⽅法 每次加密的结果都不⼀样。
2、是骡⼦是马拉出来遛遛(代码案例演⽰)
技术栈:SpringBoot 2.1.6.RELEASE(数据访问层使⽤ JPA)
开发⼯具:IDEA、Java8、Postman
引⼊依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
河流阶地
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 引⼊ SpringSecurity -->
合欢果
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- lombok⼯具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
控制层 controller
@RestController
红围脖客户端@CrossOrigin
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
// ⽤户注册
@RequestMapping(value = "/register", method = RequestMethod.POST)
public Result register(@RequestBody User user) {
boolean isRegister = ister(user);
if (!isRegister) {
return new Result(false, StatusCode.ERROR, "⼿机号码已经被注册,请直接登陆!");
}
return new Result(true, StatusCode.OK, "注册成功!");
}
// ⽤户登陆(限定使⽤⼿机号和密码登录)
@RequestMapping(value = "/login", method = RequestMethod.POST)
public Result login(@RequestBody User user) {
User loginUser = userService.Mobile(), Password());
毛细管力
if (null == loginUser) {
return new Result(false, StatusCode.LOGINERROR, "登陆失败,请检查⼿机号或者密码是否正确.");        }
return new Result(true, StatusCode.OK, "登陆成功.");
}
}
业务处理层 service
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Autowired
国家燃烧private BCryptPasswordEncoder encoder;
// ⽤户注册功能
public boolean register(User user) {
User existUser = userDao.Mobile());
if (null == existUser) {
user.UUID())
.Password()))    // 密码加密
.setFollowcount(0)
.setFanscount(0)
.setOnline(0L)
.setRegdate(new Date())
.
setUpdatedate(new Date())
.setLastdate(new Date());
userDao.save(user);
return true;
}
return false;
}
// ⽤户登陆(限定使⽤⼿机号和密码登录)
public User login(String mobile, String password) {
User existUser = userDao.findByMobile(mobile);
if (null != existUser && encoder.matches(password, Password())) {
return existUser;
}
return null;
}
}
数据库访问层 dao
public interface UserDao extends JpaRepository<User, String>, JpaSpecificationExecutor<User> {
// 判断⽤户⼿机号是否已经注册
User findByMobile(String mobile);
}
启动类注⼊ BCryptPasswordEncoder
@SpringBootApplication
public class BcryptJwtApplication {
public static void main(String[] args) {
SpringApplication.run(BcryptJwtApplication.class, args);
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
SpringSecurity 安全配置类,对路径拦截。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//authorizeRequests 所有 security 全注解配置实现的开端,表⽰开始说明需要的权限
//需要的权限分两部分,第⼀部分是拦截的路径,第⼆部分访问该路径需要的权限
//antMarcher表⽰拦截说明路径,permitAll任何权限都可以访问,直接放⾏所有
//anyRequest()任何请求,authenticated认证后才能访问
//.and.csrf.disable(),固定写法,表⽰使⽤csrf拦截失败
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()企业所得税审计
.
antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
}
使⽤ Postman 发送⽤户注册请求(如下图),在查询数据库可看到⽤户密码已加密。
使⽤ Postman 发送⽤户登陆请求(如下图),返回登陆成功提⽰。
全部⽰例代码已经上传到 github ,⽂末可获取地址。
⼆、常见的认证机制
2.1、HTTP Basic Auth
HTTP Basic Auth简单点说就是每次请求API时都提供⽤户的username和 password,简⾔之,Basic A
uth是配合RESTful API 使⽤的最简单的认证⽅式,只需提供 ⽤户名密码即可,但由于有把⽤户名密码暴露给第三⽅客户端的风险,在⽣产环境下被 使⽤的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采⽤HTTP Basic Auth
2.2 Cookie Auth
Cookie认证机制就是为⼀次请求认证在服务端创建⼀个Session对象,同时在客户端 的浏览器端创建了⼀个Cookie对象;通过客户端带上来Cookie对象来与服务器端的 session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删 除。
但可以通过修改cookie 的expire time使cookie在⼀定时间内有效;
2.3 OAuth
OAuth(开放授权)是⼀个开放的授权标准,允许⽤户让第三⽅应⽤访问该⽤户在 某⼀web服务上存储的私密的资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和 密码提供给第三⽅应⽤。
OAuth允许⽤户提供⼀个令牌,⽽不是⽤户名和密码来访问他们存放在特定服务提 供者的数据。每⼀个令牌授权⼀个特定的第三⽅系统(例如,视频编辑⽹站)在特定的时 段(例如,接下来的2⼩时内)内访问特定的资源(例如仅仅是某⼀相册中的视频)。这样,OAuth让⽤户可以授权第三⽅⽹站访问
他们存储在另外服务提供者的某些特定信 息,⽽⾮所有内容。
下⾯是OAuth2.0的流程:

本文发布于:2024-09-22 02:01:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/100065.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:密码   加密   代码   对象   机号   访问   视频   请求
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议