From cafb198c4a0c9ae2dbd63552337e380a00740b5e Mon Sep 17 00:00:00 2001 From: Amadeus Date: Tue, 23 Apr 2024 23:08:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +++- .../example/config/SecurityConfiguration.java | 13 +++++--- .../com/example/config/Webconfiguration.java | 14 ++++++++ .../java/com/example/entity/dto/Account.java | 22 +++++++++++++ .../com/example/mapper/AccountMapper.java | 9 +++++ .../com/example/service/AccountService.java | 10 ++++++ .../service/impl/AccountServiceImpl.java | 33 +++++++++++++++++++ src/main/resources/application.yaml | 7 +++- .../MyProjectBackendApplicationTests.java | 2 ++ 9 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/example/config/Webconfiguration.java create mode 100644 src/main/java/com/example/entity/dto/Account.java create mode 100644 src/main/java/com/example/mapper/AccountMapper.java create mode 100644 src/main/java/com/example/service/AccountService.java create mode 100644 src/main/java/com/example/service/impl/AccountServiceImpl.java diff --git a/pom.xml b/pom.xml index 5c852f2..e275ee6 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.5 + 3.1.2 com.example @@ -52,6 +52,11 @@ spring-boot-starter-test test + + com.baomidou + mybatis-plus-boot-starter + 3.5.3.1 + org.springframework.boot spring-boot-starter-data-redis diff --git a/src/main/java/com/example/config/SecurityConfiguration.java b/src/main/java/com/example/config/SecurityConfiguration.java index 8ac01c2..b842c08 100644 --- a/src/main/java/com/example/config/SecurityConfiguration.java +++ b/src/main/java/com/example/config/SecurityConfiguration.java @@ -1,8 +1,10 @@ package com.example.config; import com.example.entity.RestBean; +import com.example.entity.dto.Account; import com.example.entity.vo.response.AuthorizeV0; import com.example.filter.JwtAuthorizeFilter; +import com.example.service.AccountService; import com.example.utils.JwtUtils; import jakarta.annotation.Resource; import jakarta.servlet.ServletException; @@ -32,6 +34,9 @@ public class SecurityConfiguration { @Resource JwtAuthorizeFilter jwtAuthorizeFilter; + + @Resource + AccountService services; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http @@ -82,13 +87,13 @@ public class SecurityConfiguration { Authentication authentication) throws IOException, ServletException { response.setContentType("application/json;charset=utf-8"); User user = (User) authentication.getPrincipal(); - - String token = utils.createJwt(user , 1 , "小明"); + Account account = services.findAccountByNameOrEmail(user.getUsername()); + String token = utils.createJwt(user , account.getId(), account.getUsername()); AuthorizeV0 v0 = new AuthorizeV0(); v0.setExpire(utils.expireTime()); - v0.setRole(""); + v0.setRole(account.getRole()); v0.setToken(token); - v0.setUsername("小明"); + v0.setUsername(account.getUsername()); response.getWriter().write(RestBean.success(v0).asJsonString()); } diff --git a/src/main/java/com/example/config/Webconfiguration.java b/src/main/java/com/example/config/Webconfiguration.java new file mode 100644 index 0000000..4c31ed0 --- /dev/null +++ b/src/main/java/com/example/config/Webconfiguration.java @@ -0,0 +1,14 @@ +package com.example.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@Configuration +public class Webconfiguration { + //密码解释器 + @Bean + BCryptPasswordEncoder passwordEncoder(){ + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/com/example/entity/dto/Account.java b/src/main/java/com/example/entity/dto/Account.java new file mode 100644 index 0000000..4550843 --- /dev/null +++ b/src/main/java/com/example/entity/dto/Account.java @@ -0,0 +1,22 @@ +package com.example.entity.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("db_account") +@AllArgsConstructor +public class Account { + @TableId(type = IdType.AUTO) + Integer id; + String username; + String password; + String email; + String role; + Date registerTime; +} diff --git a/src/main/java/com/example/mapper/AccountMapper.java b/src/main/java/com/example/mapper/AccountMapper.java new file mode 100644 index 0000000..9639d4d --- /dev/null +++ b/src/main/java/com/example/mapper/AccountMapper.java @@ -0,0 +1,9 @@ +package com.example.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.example.entity.dto.Account; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AccountMapper extends BaseMapper { +} diff --git a/src/main/java/com/example/service/AccountService.java b/src/main/java/com/example/service/AccountService.java new file mode 100644 index 0000000..5cae6c1 --- /dev/null +++ b/src/main/java/com/example/service/AccountService.java @@ -0,0 +1,10 @@ +package com.example.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.example.entity.dto.Account; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; + +public interface AccountService extends IService , UserDetailsService { + public Account findAccountByNameOrEmail(String text); +} diff --git a/src/main/java/com/example/service/impl/AccountServiceImpl.java b/src/main/java/com/example/service/impl/AccountServiceImpl.java new file mode 100644 index 0000000..fb6df79 --- /dev/null +++ b/src/main/java/com/example/service/impl/AccountServiceImpl.java @@ -0,0 +1,33 @@ +package com.example.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.example.entity.dto.Account; +import com.example.mapper.AccountMapper; +import com.example.service.AccountService; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@Service +public class AccountServiceImpl extends ServiceImpl implements AccountService { + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Account account = this.findAccountByNameOrEmail(username); + if (account == null) + throw new UsernameNotFoundException("用户名或密码错误"); + return User + .withUsername(username) + .password(account.getPassword()) + .roles(account.getRole()) + .build(); + + } + public Account findAccountByNameOrEmail(String text){ + return this.query() + .eq("username",text).or() + .eq("email",text) + .one(); + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 0548fa4..74f9ef0 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -3,4 +3,9 @@ spring: security: jwt: key: abcdefgh - expire: 7 \ No newline at end of file + expire: 7 + datasource: + url: jdbc:mysql://localhost:3306/amadeus + username: root + password: "000000" + driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/test/java/com/example/MyProjectBackendApplicationTests.java b/src/test/java/com/example/MyProjectBackendApplicationTests.java index dfe8574..5d724c6 100644 --- a/src/test/java/com/example/MyProjectBackendApplicationTests.java +++ b/src/test/java/com/example/MyProjectBackendApplicationTests.java @@ -2,12 +2,14 @@ package com.example; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @SpringBootTest class MyProjectBackendApplicationTests { @Test void contextLoads() { + System.out.println(new BCryptPasswordEncoder().encode("123456")); } }