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() + + + +