Browse Source

7.2登录及相关配置

huangqizheng/feature-20250703103159-登陆及相关配置
huangqizhen 1 day 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. 31
      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. 36
      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>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.12</version>
<version>3.3.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
@ -100,6 +100,23 @@
<version>3.0.4</version>
<scope>test</scope>
</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>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
@ -133,6 +150,11 @@
<artifactId>hibernate-validator</artifactId>
<version>8.0.0.Final</version> <!-- 对应Spring Boot 3的实现版本 -->
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
<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.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;

2
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;

31
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);
}
}
}
}

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.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<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorities = new HashSet<>();
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() {
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);

1
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);
}

8
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();
}

36
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) {

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
where account=#{account}
</select>
<select id="selectByName" resultType="com.example.demo.domain.entity.Admin">
select * from admin
where account= #{account}
</select>
</mapper>

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

@ -3,12 +3,8 @@
<mapper namespace="com.example.demo.mapper.RateMapper">
<select id="selectAll" resultType="com.example.demo.domain.vo.RateDetail">
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 id="selectById" resultType="com.example.demo.domain.entity.Rate">

Loading…
Cancel
Save