springboot md5做鉴权
时间: 2023-07-02 09:08:00 浏览: 151
在Spring Boot中使用MD5进行鉴权可以通过以下步骤实现:
1. 在用户注册或登录时,将用户输入的密码使用MD5算法进行加密,并将加密后的密码存储到数据库中。
2. 在用户请求需要鉴权的接口时,将用户输入的密码同样使用MD5算法进行加密,并与数据库中存储的加密后的密码进行比对,如果一致则表示鉴权通过,否则鉴权失败。
下面是一个使用Spring Boot实现MD5加密和鉴权的示例代码:
1. 添加spring-boot-starter-security依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 创建一个自定义的UserDetailsService实现类,用于加载用户信息:
```java
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("用户名不存在");
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());
}
}
```
3. 创建一个自定义的PasswordEncoder实现类,用于对密码进行加密:
```java
@Component
public class Md5PasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence rawPassword) {
return DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encodedPassword.equals(DigestUtils.md5DigestAsHex(rawPassword.toString().getBytes()));
}
}
```
4. 在WebSecurityConfigurerAdapter中配置鉴权规则:
```java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private Md5PasswordEncoder passwordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginProcessingUrl("/login")
.usernameParameter("username").passwordParameter("password")
.successHandler((request, response, authentication) -> {
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("{\"status\":\"success\",\"msg\":\"登录成功\"}");
out.flush();
out.close();
})
.failureHandler((request, response, e) -> {
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("{\"status\":\"error\",\"msg\":\"登录失败\"}");
out.flush();
out.close();
})
.permitAll()
.and()
.logout().logoutUrl("/logout")
.logoutSuccessHandler((request, response, authentication) -> {
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("{\"status\":\"success\",\"msg\":\"退出成功\"}");
out.flush();
out.close();
})
.permitAll()
.and()
.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
}
}
```
在上述代码中,我们使用了自定义的UserDetailsService和PasswordEncoder实现类,并在configure方法中配置了登录、登出和鉴权规则。其中,登录和登出规则分别对应/login和/logout接口,鉴权规则则是任何需要鉴权的接口都需要通过认证才能访问。
5. 在Controller中添加登录接口:
```java
@RestController
public class LoginController {
@PostMapping("/login")
public void login(@RequestParam String username, @RequestParam String password) {
// 鉴权通过
}
}
```
在上述代码中,我们使用了@RequestParam注解获取用户名和密码,并在服务端对密码进行MD5加密后进行鉴权。如果鉴权通过,则可以执行相应的业务逻辑。
以上就是使用Spring Boot实现MD5加密和鉴权的完整示例。需要注意的是,MD5虽然是一种常用的密码加密算法,但其安全性并不是非常高,因此在实际应用中需要根据具体情况选择更加安全的加密算法。
阅读全文