Browse Source

7.2登录及相关配置

huangqizheng/feature-20250703103159-登陆及相关配置
huangqizhen 2 days ago
parent
commit
e1d6a2dc11
  1. 24
      pom.xml
  2. 2
      src/main/java/com/example/demo/Util/JWTUtil.java
  3. 2
      src/main/java/com/example/demo/Util/TokenPayload.java
  4. 27
      src/main/java/com/example/demo/controller/AdminController.java
  5. 3
      src/main/java/com/example/demo/domain/entity/Admin.java
  6. 5
      src/main/java/com/example/demo/domain/vo/Result.java
  7. 1
      src/main/java/com/example/demo/mapper/AdminMapper.java
  8. 8
      src/main/java/com/example/demo/security/SecurityConfig.java
  9. 34
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  10. 30
      src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java
  11. 5
      src/main/resources/mapper/AdminMapper.xml
  12. 8
      src/main/resources/mapper/RateMapper.xml

24
pom.xml

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.12</version>
<version>3.3.6</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.example</groupId> <groupId>com.example</groupId>
@ -100,6 +100,23 @@
<version>3.0.4</version> <version>3.0.4</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-api</artifactId>-->
<!-- <version>0.11.5</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-impl</artifactId>-->
<!-- <version>0.11.5</version>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt-jackson</artifactId> &lt;!&ndash; 或 jjwt-gson &ndash;&gt;-->
<!-- <version>0.11.5</version>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId> <artifactId>jjwt</artifactId>
@ -133,6 +150,11 @@
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<version>8.0.0.Final</version> <!-- 对应Spring Boot 3的实现版本 --> <version>8.0.0.Final</version> <!-- 对应Spring Boot 3的实现版本 -->
</dependency> </dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

2
src/main/java/com/example/demo/Util/JWTUtil.java

@ -7,8 +7,10 @@ import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.util.Base64; import java.util.Base64;

2
src/main/java/com/example/demo/Util/TokenPayload.java

@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
public class TokenPayload { public class TokenPayload {
@JsonProperty("token") @JsonProperty("token")
private String token; private String token;
private String jwcode;
private String account;
private String password; private String password;
private String pageNum; private String pageNum;
private String pageSize; private String pageSize;

27
src/main/java/com/example/demo/controller/AdminController.java

@ -1,12 +1,16 @@
package com.example.demo.controller; package com.example.demo.controller;
import com.example.demo.Util.JWTUtil; import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.TokenPayload;
import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.Result; import com.example.demo.domain.vo.Result;
import com.example.demo.service.AdminService; import com.example.demo.service.AdminService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/** /**
@ -30,14 +34,33 @@ public class AdminController {
try { try {
admin = adminService.login(admin); admin = adminService.login(admin);
String token = JWTUtil.createJWT(admin);
System.out.println( token);
admin.setPassword(null); admin.setPassword(null);
System.out.println("达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达瓦达");
return Result.success(admin);
return Result.success(token,admin);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error(e.getMessage()); log.error(e.getMessage());
return Result.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);
}
} }
} }

3
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.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
@ -13,6 +14,7 @@ import java.util.*;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Admin implements UserDetails, Serializable { public class Admin implements UserDetails, Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -35,6 +37,7 @@ public class Admin implements UserDetails, Serializable {
@Override @Override
@JsonIgnore
public Collection<? extends GrantedAuthority> getAuthorities() { public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorities = new HashSet<>(); Set<GrantedAuthority> authorities = new HashSet<>();
Optional.ofNullable(postiton) Optional.ofNullable(postiton)

5
src/main/java/com/example/demo/domain/vo/Result.java

@ -24,7 +24,10 @@ public class Result implements Serializable {
public static Result success() { public static Result success() {
return new Result(200, "success", new HashMap<>()); 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) { public static Result success(Object data) {
return new Result(200, "success", data); return new Result(200, "success", data);

1
src/main/java/com/example/demo/mapper/AdminMapper.java

@ -14,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface AdminMapper { public interface AdminMapper {
Admin getAdmin(String account); Admin getAdmin(String account);
Admin selectByName(String account);
} }

8
src/main/java/com/example/demo/security/SecurityConfig.java

@ -36,8 +36,8 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
public class SecurityConfig { public class SecurityConfig {
// @Autowired
// TokenFilter tokenFilter;
@Autowired
TokenFilter tokenFilter;
// 核心配置 配置一个过滤器链 // 核心配置 配置一个过滤器链
@ -60,7 +60,7 @@ public class SecurityConfig {
request request
.requestMatchers( HttpMethod.POST, .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( .requestMatchers(
"/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**" "/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**"
).permitAll() ).permitAll()
@ -70,7 +70,7 @@ public class SecurityConfig {
// http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter
http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter
return http.build(); return http.build();
} }

34
src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java

@ -6,22 +6,19 @@ import com.example.demo.service.AdminService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class AdminServiceImpl implements AdminService { 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; private final AdminMapper adminMapper;
@Override @Override
@ -33,18 +30,18 @@ public class AdminServiceImpl implements AdminService {
throw new IllegalArgumentException("账号不能为空"); 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:" + account);
System.out.println("admin:" + admin.getPassword()); System.out.println("admin:" + admin.getPassword());
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken token =
@ -52,11 +49,10 @@ public class AdminServiceImpl implements AdminService {
Authentication authentication = authenticationManager.authenticate(token); Authentication authentication = authenticationManager.authenticate(token);
return (Admin) authentication.getPrincipal(); 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) { private boolean hasPermissionToMachine(Admin admin, String targetMachineId) {

30
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;
}
}

5
src/main/resources/mapper/AdminMapper.xml

@ -6,4 +6,9 @@
select * from admin select * from admin
where account=#{account} where account=#{account}
</select> </select>
<select id="selectByName" resultType="com.example.demo.domain.entity.Admin">
select * from admin
where account= #{account}
</select>
</mapper> </mapper>

8
src/main/resources/mapper/RateMapper.xml

@ -3,12 +3,8 @@
<mapper namespace="com.example.demo.mapper.RateMapper"> <mapper namespace="com.example.demo.mapper.RateMapper">
<select id="selectAll" resultType="com.example.demo.domain.vo.RateDetail"> <select id="selectAll" resultType="com.example.demo.domain.vo.RateDetail">
SELECT SELECT
*,
CASE
WHEN update_time IS NULL OR create_time > update_time THEN create_time
ELSE update_time
END AS last_time
FROM rate
r.id,r.rate_name rateName,r.num,r.admin_id adminId,r.create_time createTime,r.update_time updateTime
FROM rate r
</select> </select>
<select id="selectById" resultType="com.example.demo.domain.entity.Rate"> <select id="selectById" resultType="com.example.demo.domain.entity.Rate">

Loading…
Cancel
Save