From 60bf3424c8b3bb57d365de87fbc3cfc713ca9cc9 Mon Sep 17 00:00:00 2001
From: huangqizhen <15552608129@163.com>
Date: Wed, 2 Jul 2025 09:28:11 +0800
Subject: [PATCH] =?UTF-8?q?7.2=E6=B1=87=E7=8E=87=E5=90=88=E5=B9=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 1 +
.../example/demo/controller/RateController.java | 69 ++++++++++++++++++++
.../com/example/demo/domain/vo/RateDetail.java | 30 +++++++++
.../java/com/example/demo/mapper/RateMapper.java | 18 ++++++
.../com/example/demo/security/SecurityConfig.java | 8 +--
.../com/example/demo/security/TokenFilter.java | 28 ++++----
.../java/com/example/demo/service/RateService.java | 16 +++++
.../example/demo/serviceImpl/AdminServiceImpl.java | 74 ++++++++++++----------
.../example/demo/serviceImpl/RateServiceImpl.java | 43 +++++++++++++
src/main/resources/mapper/RateMapper.xml | 42 ++++++++++++
10 files changed, 277 insertions(+), 52 deletions(-)
create mode 100644 src/main/java/com/example/demo/controller/RateController.java
create mode 100644 src/main/java/com/example/demo/domain/vo/RateDetail.java
create mode 100644 src/main/java/com/example/demo/mapper/RateMapper.java
create mode 100644 src/main/java/com/example/demo/service/RateService.java
create mode 100644 src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java
create mode 100644 src/main/resources/mapper/RateMapper.xml
diff --git a/pom.xml b/pom.xml
index 0876372..69366c5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -112,6 +112,7 @@
org.springframework.boot
spring-boot-starter-security
+ 3.3.6
org.springframework.boot
diff --git a/src/main/java/com/example/demo/controller/RateController.java b/src/main/java/com/example/demo/controller/RateController.java
new file mode 100644
index 0000000..1d34ac1
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/RateController.java
@@ -0,0 +1,69 @@
+package com.example.demo.controller;
+
+
+import com.example.demo.domain.entity.Rate;
+import com.example.demo.domain.vo.Page;
+import com.example.demo.domain.vo.Result;
+import com.example.demo.mapper.RateMapper;
+import com.example.demo.service.RateService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+
+@RestController
+@RequestMapping("/rate")
+@RequiredArgsConstructor
+@Slf4j
+@CrossOrigin
+public class RateController {
+
+ @Autowired
+ private RateService rateService;
+
+ //货币汇率列表
+ @PostMapping("/selectAll")
+ public Result selectAll(@RequestBody Page page){
+ if (ObjectUtils.isEmpty(page.getPageNum())) {
+ return Result.error("页码数为空!");
+ }
+ if (ObjectUtils.isEmpty(page.getPageSize())) {
+ return Result.error("页大小为空!");
+ } else {
+ return Result.success(rateService.selectAll(page.getPageNum(), page.getPageSize()));
+ }
+ }
+
+ //查询货币
+ @PostMapping("/selectById")
+ public Result selectById(@RequestBody Map requestBody) {
+ Integer id = (Integer) requestBody.get("id");
+ if (ObjectUtils.isEmpty(id)) {
+ return Result.error("id 为空!");
+ }
+ Rate rate = rateService.selectById(id);
+ return Result.success(rate);
+ }
+
+ // 编辑
+ @PostMapping("/update")
+ public Result update(@RequestBody Rate rate) {
+ if (ObjectUtils.isEmpty(rate.getId())) {
+ return Result.error("id不能为空");
+ }
+ if (ObjectUtils.isEmpty(rate.getRateName())) {
+ return Result.error("汇率名称不能为空");
+ }
+ if (rate.getNum() == null) {
+ return Result.error("汇率数值不能为空");
+ }
+ rateService.update(rate);
+ return Result.success("编辑成功");
+ }
+
+}
diff --git a/src/main/java/com/example/demo/domain/vo/RateDetail.java b/src/main/java/com/example/demo/domain/vo/RateDetail.java
new file mode 100644
index 0000000..37a240b
--- /dev/null
+++ b/src/main/java/com/example/demo/domain/vo/RateDetail.java
@@ -0,0 +1,30 @@
+package com.example.demo.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+ @Data
+ @NoArgsConstructor
+ public class RateDetail {
+ private static final long serialVersionUID = 1L;
+
+
+ private Integer id;
+ private String rateName;
+ private BigDecimal num = BigDecimal.ZERO;
+ private Integer adminId;//提交人
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date createTime; // 创建时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date updateTime; // 更新时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+ private Date lastTime; // 最晚时间
+
+
+ }
+
+
diff --git a/src/main/java/com/example/demo/mapper/RateMapper.java b/src/main/java/com/example/demo/mapper/RateMapper.java
new file mode 100644
index 0000000..05602f3
--- /dev/null
+++ b/src/main/java/com/example/demo/mapper/RateMapper.java
@@ -0,0 +1,18 @@
+package com.example.demo.mapper;
+
+import com.example.demo.domain.entity.Rate;
+import com.example.demo.domain.vo.RateDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+@Mapper
+public interface RateMapper {
+
+ List selectAll();
+
+ Rate selectById(Integer id);
+
+ void update(Rate rate);
+
+ void add(Rate rate);
+}
diff --git a/src/main/java/com/example/demo/security/SecurityConfig.java b/src/main/java/com/example/demo/security/SecurityConfig.java
index 4843f2a..42fa25d 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/security/TokenFilter.java b/src/main/java/com/example/demo/security/TokenFilter.java
index 00db23e..35f929c 100644
--- a/src/main/java/com/example/demo/security/TokenFilter.java
+++ b/src/main/java/com/example/demo/security/TokenFilter.java
@@ -1,14 +1,12 @@
package com.example.demo.security;
-
import com.example.demo.Util.JWTUtil;
-import com.example.demo.Util.RequestWrapper;
import com.example.demo.domain.entity.Admin;
+import com.example.demo.domain.entity.User;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
@@ -17,25 +15,25 @@ import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
-import java.io.IOException;
+import java.io.IOException;
@Component
public class TokenFilter extends OncePerRequestFilter {
@Override
- protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
- // 取Token 生成登录信息
- String token = request.getHeader("token");
-
-
- System.out.println(token+"123132132");
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+ throws ServletException, IOException {
+ // 忽略登录接口的token处理,防止无限递归
+ if (request.getRequestURI().startsWith("/admin/login")) {
+ filterChain.doFilter(request, response);
+ return;
+ }
- // token不为空
- if (StringUtils.hasText(token)){
+ String token = request.getHeader("token");
+ if (StringUtils.hasText(token)) {
try {
UserDetails userDetails = JWTUtil.getUserDetailsList(token, Admin.class);
- if ( ! ObjectUtils.isEmpty(userDetails)) {
- // 将这个用户注册到Security中
+ if (!ObjectUtils.isEmpty(userDetails)) {
UsernamePasswordAuthenticationToken authenticationToken
= new UsernamePasswordAuthenticationToken(
userDetails, null,
@@ -45,10 +43,8 @@ public class TokenFilter extends OncePerRequestFilter {
}
} catch (Exception e) {
e.printStackTrace();
- // Token无效,
}
}
- // 过滤器放行
filterChain.doFilter(request, response);
}
}
diff --git a/src/main/java/com/example/demo/service/RateService.java b/src/main/java/com/example/demo/service/RateService.java
new file mode 100644
index 0000000..685f6aa
--- /dev/null
+++ b/src/main/java/com/example/demo/service/RateService.java
@@ -0,0 +1,16 @@
+package com.example.demo.service;
+
+import com.example.demo.domain.entity.Rate;
+import com.example.demo.domain.vo.RateDetail;
+import com.github.pagehelper.PageInfo;
+
+public interface RateService {
+
+ PageInfo selectAll(Integer pageNum, Integer pageSize);
+
+ Rate selectById(Integer id);
+
+ void add(Rate rate);
+
+ void update(Rate rate);
+}
diff --git a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
index d9b1620..c048594 100644
--- a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
@@ -15,50 +15,60 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
-@Transactional
@Service
@RequiredArgsConstructor
public class AdminServiceImpl implements AdminService {
- @Autowired
- private AuthenticationManager authenticationManager;
- @Autowired
- private AdminMapper adminMapper;
+ private static final Logger log = LoggerFactory.getLogger(AdminServiceImpl.class);
+
+ private final AuthenticationManager authenticationManager;
+ private final AdminMapper adminMapper;
@Override
public Admin login(Admin admin) throws Exception {
- try {
- Admin admin1 = adminMapper.getAdmin(admin.getAccount());
- String[] machineIds = admin1.getMachineId().split(",");
+ String account = admin.getAccount();
+ String inputMachineId = admin.getMachineId();
- boolean flag = false;
- for (String machineId : machineIds) {
- if (admin.getMachineId() != null && admin.getMachineId().equals(machineId))
- flag = true;
- }
- if (!flag) {
- throw new RuntimeException("你没有使用该机器的权限!");
- }
- System.out.println(admin.getAccount());
- System.out.println(admin.getPassword()+"---------------------------");
- UsernamePasswordAuthenticationToken token =
- new UsernamePasswordAuthenticationToken(admin.getAccount(),admin.getPassword());
- System.out.println( token+"---------------------------");
-// Authentication authentication = authenticationManager.authenticate(token);
-// Admin loginAdmin = (Admin) authentication.getPrincipal();
- Admin loginAdmin = (Admin) authenticationManager.authenticate(token).getPrincipal();
+ if (StringUtils.isBlank(account)) {
+ throw new IllegalArgumentException("账号不能为空");
+ }
- return loginAdmin;
+// Admin adminInDB = adminMapper.getAdmin(account);
+// System.out.println("adminInDB:" + adminInDB);
+// if (adminInDB == null) {
+// throw new RuntimeException("无此精网号");
+// }
- }catch (NullPointerException e){
- throw new RuntimeException("无此精网号");
- }catch(BadCredentialsException exception){
- throw new BadCredentialsException("密码错误");
- }catch (Exception e){
- throw new RuntimeException("你没有使用该机器的权限!");
- }
+ // 校验机器权限
+// if (!hasPermissionToMachine(adminInDB, inputMachineId)) {
+// throw new RuntimeException("你没有使用该机器的权限!");
+// }
+// try {
+ System.out.println("admin:" + account);
+ System.out.println("admin:" + admin.getPassword());
+ UsernamePasswordAuthenticationToken token =
+ new UsernamePasswordAuthenticationToken(account,admin.getPassword());
+ Authentication authentication = authenticationManager.authenticate(token);
+ return (Admin) authentication.getPrincipal();
+// } catch (Exception e) {
+// System.out.println("密码错误"+e.getMessage());
+// log.error("登录过程中发生异常", e);
+// throw new RuntimeException("登录失败,请稍后再试", e);
+// }
}
+ private boolean hasPermissionToMachine(Admin admin, String targetMachineId) {
+ if (targetMachineId == null || admin.getMachineId() == null) {
+ return false;
+ }
+ String[] machineIds = admin.getMachineId().split(",");
+ for (String id : machineIds) {
+ if (targetMachineId.equals(id)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java
new file mode 100644
index 0000000..57f933a
--- /dev/null
+++ b/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java
@@ -0,0 +1,43 @@
+package com.example.demo.serviceImpl;
+
+import com.example.demo.domain.entity.Rate;
+import com.example.demo.domain.vo.ConsumeUser;
+import com.example.demo.domain.vo.RateDetail;
+import com.example.demo.mapper.RateMapper;
+import com.example.demo.service.RateService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+@Service
+public class RateServiceImpl implements RateService {
+ @Autowired
+ private RateMapper rateMapper;
+
+
+ @Override
+ public PageInfo selectAll(Integer pageNum, Integer pageSize) {
+ PageHelper.startPage(pageNum, pageSize);
+ List rates = rateMapper.selectAll();
+ return new PageInfo<>(rates);
+ }
+
+ @Override
+ public Rate selectById(Integer id) {
+ return rateMapper.selectById(id);
+ }
+
+ @Override
+ public void add(Rate rate) {
+ rateMapper.add(rate);
+ }
+
+ @Override
+ public void update(Rate rate) {
+ rateMapper.update(rate);
+ }
+}
diff --git a/src/main/resources/mapper/RateMapper.xml b/src/main/resources/mapper/RateMapper.xml
new file mode 100644
index 0000000..229b1fb
--- /dev/null
+++ b/src/main/resources/mapper/RateMapper.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+ UPDATE
+ rate
+ SET
+ rate_name=#{rateName},
+ num=#{num},
+ admin_id=#{adminId},
+ update_time=#{updateTime}
+ WHERE
+ id=#{id}
+
+
+
+
+ INSERT INTO rate
+ (rate_name, num, admin_id, create_time)
+ VALUES
+ (#{rateName}, #{num}, #{adminId}, #{createTime})
+
+ SELECT LAST_INSERT_ID()
+
+
+
+