diff --git a/pom.xml b/pom.xml index 69366c5..8672366 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.12 + 3.3.6 com.example @@ -100,6 +100,23 @@ 3.0.4 test + + + + + + + + + + + + + + + + + io.jsonwebtoken jjwt @@ -133,6 +150,11 @@ hibernate-validator 8.0.0.Final + + javax.xml.bind + jaxb-api + 2.3.1 + diff --git a/src/main/java/com/example/demo/Util/JWTUtil.java b/src/main/java/com/example/demo/Util/JWTUtil.java index dd3d8bd..b13e23d 100644 --- a/src/main/java/com/example/demo/Util/JWTUtil.java +++ b/src/main/java/com/example/demo/Util/JWTUtil.java @@ -7,8 +7,10 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; + import org.springframework.security.core.userdetails.UserDetails; + import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; diff --git a/src/main/java/com/example/demo/Util/TokenPayload.java b/src/main/java/com/example/demo/Util/TokenPayload.java index 9eb5d32..d0563cc 100644 --- a/src/main/java/com/example/demo/Util/TokenPayload.java +++ b/src/main/java/com/example/demo/Util/TokenPayload.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; public class TokenPayload { @JsonProperty("token") private String token; - private String jwcode; + private String account; private String password; private String pageNum; private String pageSize; diff --git a/src/main/java/com/example/demo/controller/AdminController.java b/src/main/java/com/example/demo/controller/AdminController.java index c117b3e..21294f0 100644 --- a/src/main/java/com/example/demo/controller/AdminController.java +++ b/src/main/java/com/example/demo/controller/AdminController.java @@ -1,12 +1,16 @@ package com.example.demo.controller; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.TokenPayload; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.Result; import com.example.demo.service.AdminService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; /** @@ -26,18 +30,37 @@ public class AdminController { @Autowired private AdminService adminService; @PostMapping("/login") - public Result login(@RequestBody Admin admin){ + public Result login(@RequestBody Admin admin) { try { admin = adminService.login(admin); + String token = JWTUtil.createJWT(admin); + System.out.println( token); admin.setPassword(null); - System.out.println("达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达"); - return Result.success(admin); + return Result.success(token,admin); } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); return Result.error(e.getMessage()); } + } + @PostMapping("/userinfo") + public UserDetails getUserInfo(@RequestBody String requestBody) { + ObjectMapper objectMapper = new ObjectMapper(); + TokenPayload token1; + try { + token1 = objectMapper.readValue(requestBody, TokenPayload.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + String token = token1.getToken(); + System.out.println("1/*/*/*/*//*-*-*-*-*-*-1" +token); + try { + System.out.println("/+/+/+/+/+/+/+//" + JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class)); + return JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } -} diff --git a/src/main/java/com/example/demo/domain/entity/Admin.java b/src/main/java/com/example/demo/domain/entity/Admin.java index 86dbb80..56a48da 100644 --- a/src/main/java/com/example/demo/domain/entity/Admin.java +++ b/src/main/java/com/example/demo/domain/entity/Admin.java @@ -2,6 +2,7 @@ package com.example.demo.domain.entity; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.security.core.GrantedAuthority; @@ -13,6 +14,7 @@ import java.util.*; @Data @NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) public class Admin implements UserDetails, Serializable { private static final long serialVersionUID = 1L; @@ -35,6 +37,7 @@ public class Admin implements UserDetails, Serializable { @Override + @JsonIgnore public Collection getAuthorities() { Set authorities = new HashSet<>(); Optional.ofNullable(postiton) diff --git a/src/main/java/com/example/demo/domain/vo/Result.java b/src/main/java/com/example/demo/domain/vo/Result.java index 9de7ea5..b4ff1ef 100644 --- a/src/main/java/com/example/demo/domain/vo/Result.java +++ b/src/main/java/com/example/demo/domain/vo/Result.java @@ -24,7 +24,10 @@ public class Result implements Serializable { public static Result success() { return new Result(200, "success", new HashMap<>()); } - + //登录返回token使用 + public static Result success(String token,Object data) { + return new Result(200, token, data); + } // 查询成功响应(把查询结果作为返回数据响应给前端) public static Result success(Object data) { return new Result(200, "success", data); diff --git a/src/main/java/com/example/demo/mapper/AdminMapper.java b/src/main/java/com/example/demo/mapper/AdminMapper.java index 4ae3ec7..b45f7a3 100644 --- a/src/main/java/com/example/demo/mapper/AdminMapper.java +++ b/src/main/java/com/example/demo/mapper/AdminMapper.java @@ -14,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface AdminMapper { Admin getAdmin(String account); + Admin selectByName(String account); } diff --git a/src/main/java/com/example/demo/security/SecurityConfig.java b/src/main/java/com/example/demo/security/SecurityConfig.java index 42fa25d..4843f2a 100644 --- a/src/main/java/com/example/demo/security/SecurityConfig.java +++ b/src/main/java/com/example/demo/security/SecurityConfig.java @@ -36,8 +36,8 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; public class SecurityConfig { -// @Autowired -// TokenFilter tokenFilter; + @Autowired + TokenFilter tokenFilter; // 核心配置 配置一个过滤器链 @@ -60,7 +60,7 @@ public class SecurityConfig { request .requestMatchers( HttpMethod.POST, // 用户不登录就可以访问的路径 - "/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**").permitAll() + "/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/**").permitAll() .requestMatchers( "/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**" ).permitAll() @@ -70,7 +70,7 @@ public class SecurityConfig { -// http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter + http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter return http.build(); } diff --git a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java index c048594..b952fb5 100644 --- a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java @@ -6,22 +6,19 @@ import com.example.demo.service.AdminService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor public class AdminServiceImpl implements AdminService { - private static final Logger log = LoggerFactory.getLogger(AdminServiceImpl.class); - - private final AuthenticationManager authenticationManager; + @Autowired + private AuthenticationManager authenticationManager; private final AdminMapper adminMapper; @Override @@ -33,18 +30,18 @@ public class AdminServiceImpl implements AdminService { throw new IllegalArgumentException("账号不能为空"); } -// Admin adminInDB = adminMapper.getAdmin(account); -// System.out.println("adminInDB:" + adminInDB); -// if (adminInDB == null) { -// throw new RuntimeException("无此精网号"); -// } + Admin adminInDB = adminMapper.getAdmin(account); + System.out.println("adminInDB:" + adminInDB); + if (adminInDB == null) { + throw new RuntimeException("无此精网号"); + } - // 校验机器权限 -// if (!hasPermissionToMachine(adminInDB, inputMachineId)) { -// throw new RuntimeException("你没有使用该机器的权限!"); -// } +// 校验机器权限 + if (!hasPermissionToMachine(adminInDB, inputMachineId)) { + throw new RuntimeException("你没有使用该机器的权限!"); + } -// try { + try { System.out.println("admin:" + account); System.out.println("admin:" + admin.getPassword()); UsernamePasswordAuthenticationToken token = @@ -52,11 +49,10 @@ public class AdminServiceImpl implements AdminService { Authentication authentication = authenticationManager.authenticate(token); return (Admin) authentication.getPrincipal(); -// } catch (Exception e) { -// System.out.println("密码错误"+e.getMessage()); -// log.error("登录过程中发生异常", e); -// throw new RuntimeException("登录失败,请稍后再试", e); -// } + } catch (Exception e) { + System.out.println("密码错误"+e.getMessage()); + throw new RuntimeException("登录失败,请稍后再试", e); + } } private boolean hasPermissionToMachine(Admin admin, String targetMachineId) { diff --git a/src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java new file mode 100644 index 0000000..0ebcbbc --- /dev/null +++ b/src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java @@ -0,0 +1,30 @@ +package com.example.demo.serviceImpl; + + +import com.example.demo.domain.entity.Admin; +import com.example.demo.mapper.AdminMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +@Transactional +@Service +@RequiredArgsConstructor + +public class UserDetailServiceImpl implements UserDetailsService { + @Autowired + private AdminMapper adminMapper; + + @Override + public UserDetails loadUserByUsername(String account) throws UsernameNotFoundException { + Admin admin=adminMapper.selectByName(account); + if(ObjectUtils.isEmpty(admin)){ + throw new UsernameNotFoundException("用户名不存在"); + } + return admin; + } +} diff --git a/src/main/resources/mapper/AdminMapper.xml b/src/main/resources/mapper/AdminMapper.xml index 19fee93..f85f2a0 100644 --- a/src/main/resources/mapper/AdminMapper.xml +++ b/src/main/resources/mapper/AdminMapper.xml @@ -6,4 +6,9 @@ select * from admin where account=#{account} + + diff --git a/src/main/resources/mapper/RateMapper.xml b/src/main/resources/mapper/RateMapper.xml index 229b1fb..15eab29 100644 --- a/src/main/resources/mapper/RateMapper.xml +++ b/src/main/resources/mapper/RateMapper.xml @@ -3,12 +3,8 @@