caolinxuan 4 months ago
parent
commit
fde62ae08a
29 changed files with 669 additions and 616 deletions
  1. 5 0
      pom.xml
  2. 14 2
      src/main/java/com/zhentao/common/course/controller/ProductController.java
  3. 3 1
      src/main/java/com/zhentao/common/course/domain/Product.java
  4. 7 1
      src/main/java/com/zhentao/common/course/service/ProductService.java
  5. 35 2
      src/main/java/com/zhentao/common/course/service/impl/ProductServiceImpl.java
  6. 19 0
      src/main/java/com/zhentao/common/course/vo/ProductVo.java
  7. 11 0
      src/main/java/com/zhentao/common/orders/controller/OrderController.java
  8. 33 0
      src/main/java/com/zhentao/common/orders/dto/PayDto.java
  9. 3 0
      src/main/java/com/zhentao/common/orders/service/OrdersService.java
  10. 33 1
      src/main/java/com/zhentao/common/orders/service/impl/OrdersServiceImpl.java
  11. 1 1
      src/main/java/com/zhentao/common/orders/vo/OrdersVo.java
  12. 0 15
      src/main/java/com/zhentao/common/service/MarketingCouponService.java
  13. 0 15
      src/main/java/com/zhentao/common/service/MarketingCouponUserService.java
  14. 0 14
      src/main/java/com/zhentao/common/service/OrderDetailsService.java
  15. 0 19
      src/main/java/com/zhentao/common/service/OrdersService.java
  16. 0 24
      src/main/java/com/zhentao/common/service/impl/MarketingCouponServiceImpl.java
  17. 0 24
      src/main/java/com/zhentao/common/service/impl/MarketingCouponUserServiceImpl.java
  18. 0 22
      src/main/java/com/zhentao/common/service/impl/OrderDetailsServiceImpl.java
  19. 0 59
      src/main/java/com/zhentao/common/service/impl/OrdersServiceImpl.java
  20. 8 1
      src/main/java/com/zhentao/common/user/controller/LoginController.java
  21. 3 0
      src/main/java/com/zhentao/common/user/service/GooseUserService.java
  22. 29 1
      src/main/java/com/zhentao/common/user/service/impl/GooseUserServiceImpl.java
  23. 0 18
      src/main/java/com/zhentao/config/CorsConfig.java
  24. 0 81
      src/main/java/com/zhentao/controller/WechatLoginController.java
  25. 0 18
      src/main/java/com/zhentao/shiro/config/CorsConfig.java
  26. 294 295
      src/main/java/com/zhentao/shiro/config/ShiroConfig.java
  27. 1 2
      src/main/java/com/zhentao/shiro/utils/JwtToken.java
  28. 169 0
      src/main/java/com/zhentao/util/HttpClient.java
  29. 1 0
      src/main/resources/mapper/ProductMapper.xml

+ 5 - 0
pom.xml

@@ -20,6 +20,11 @@
             <version>1.70</version>
         </dependency>
         <dependency>
+            <groupId>com.github.wxpay</groupId>
+            <artifactId>wxpay-sdk</artifactId>
+            <version>0.0.3</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>

+ 14 - 2
src/main/java/com/zhentao/common/course/controller/ProductController.java

@@ -20,7 +20,19 @@ public class ProductController {
     }
 //    查看分类
     @RequestMapping("findCategory")
-    public ResultVo findCategory(Integer id){
-        return ResultVo.OK(productService.findCategory(id));
+    public ResultVo findCategory(){
+        return ResultVo.OK(productService.findCategory());
+    }
+//    查询所有的课程
+    @RequestMapping("findAll")
+    public ResultVo findAll(){
+        return ResultVo.OK(productService.findAll());
+    }
+//    搜索课程
+//    @RequestMapping("findByName")
+//
+    @RequestMapping("findOne")
+    public ResultVo findOne(Long productId){
+        return productService.findOne(productId);
     }
 }

+ 3 - 1
src/main/java/com/zhentao/common/course/domain/Product.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import lombok.Data;
 
@@ -49,6 +50,7 @@ public class Product implements Serializable {
     /**
      * 课程详情(HTML)
      */
+    private BigDecimal price;
     private String detail;
 
     /**
@@ -83,4 +85,4 @@ public class Product implements Serializable {
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
-}
+}

+ 7 - 1
src/main/java/com/zhentao/common/course/service/ProductService.java

@@ -6,6 +6,8 @@ import com.zhentao.common.course.domain.ProductCategory;
 import com.zhentao.common.course.dto.ProductDto;
 import com.zhentao.util.ResultVo;
 
+import java.util.List;
+
 /**
 * @author 86159
 * @description 针对表【product(商品基本信息表)】的数据库操作Service
@@ -15,5 +17,9 @@ public interface ProductService extends IService<Product> {
 //    课程添加
     ResultVo add(ProductDto productDto);
     //    查看分类
-    ProductCategory findCategory(Integer id);
+    List<ProductCategory> findCategory();
+
+    List<Product> findAll();
+
+    ResultVo findOne(Long productId);
 }

+ 35 - 2
src/main/java/com/zhentao/common/course/service/impl/ProductServiceImpl.java

@@ -1,19 +1,24 @@
 package com.zhentao.common.course.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhentao.common.course.domain.Product;
 import com.zhentao.common.course.domain.ProductCategory;
 import com.zhentao.common.course.domain.ProductSku;
 import com.zhentao.common.course.dto.ProductDto;
 import com.zhentao.common.course.mapper.ProductCategoryMapper;
+import com.zhentao.common.course.mapper.ProductSkuMapper;
 import com.zhentao.common.course.service.ProductService;
 import com.zhentao.common.course.mapper.ProductMapper;
+import com.zhentao.common.course.vo.ProductVo;
 import com.zhentao.util.ResultVo;
 import com.zhentao.util.SnowflakeIdGenerator;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @author 86159
 * @description 针对表【product(商品基本信息表)】的数据库操作Service实现
@@ -26,6 +31,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
     private ProductMapper productMapper;
     @Autowired
     private ProductCategoryMapper productCategoryMapper;
+    @Autowired
+    private ProductSkuMapper productSkuMapper;
     @Override
     public ResultVo add(ProductDto productDto) {
         Product product = new Product();
@@ -45,8 +52,34 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
     }
     //    查看分类
     @Override
-    public ProductCategory findCategory(Integer id) {
-        return productCategoryMapper.selectById(id);
+    public List<ProductCategory> findCategory() {
+        return productCategoryMapper.selectList(null);
+    }
+
+    @Override
+    public List<Product> findAll() {
+       QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
+        return productMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public ResultVo findOne(Long productId) {
+        System.err.println(productId);
+        Product product = productMapper.selectById(productId);
+        QueryWrapper<ProductSku>queryWrapper=new QueryWrapper<>();
+        queryWrapper.eq("product_id",product.getId());
+        ProductSku productSku=productSkuMapper.selectOne(queryWrapper);
+        ProductVo productVo=new ProductVo();
+        productVo.setProductId(product.getId());
+        productVo.setImages(product.getImages());
+        productVo.setMainImage(product.getMainImage());
+        productVo.setName(product.getName());
+        productVo.setPrice(productSku.getPrice());
+        productVo.setOriginalPrice(productSku.getOriginalPrice());
+        productVo.setStock(productSku.getStock());
+        productVo.setSubtitle(product.getSubtitle());
+        productVo.setCategoryId(product.getCategoryId());
+        return ResultVo.OK(productVo);
     }
 }
 

+ 19 - 0
src/main/java/com/zhentao/common/course/vo/ProductVo.java

@@ -0,0 +1,19 @@
+package com.zhentao.common.course.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ProductVo {
+    private Long productId;
+    private Long categoryId;
+    private String name;
+    private String subtitle;
+    private String mainImage;
+    private String images;
+    private BigDecimal price;
+    private BigDecimal originalPrice;
+    private Integer stock;
+
+}

+ 11 - 0
src/main/java/com/zhentao/common/orders/controller/OrderController.java

@@ -3,9 +3,11 @@ package com.zhentao.common.orders.controller;
 
 
 import com.zhentao.common.orders.dto.OrdersDto;
+import com.zhentao.common.orders.dto.PayDto;
 import com.zhentao.common.orders.service.OrdersService;
 import com.zhentao.util.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -25,4 +27,13 @@ public class OrderController {
     public ResultVo findAll(){
         return ordersService.findAll();
     }
+    @PostMapping("generateOrder")
+    public ResultVo generateOrder(@RequestBody PayDto payDto){
+        try {
+            return ordersService.generateOrder(payDto);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResultVo(500,"生成二维码失败",null);
+        }
+    }
 }

+ 33 - 0
src/main/java/com/zhentao/common/orders/dto/PayDto.java

@@ -0,0 +1,33 @@
+package com.zhentao.common.orders.dto;
+
+import java.io.Serializable;
+
+public class PayDto implements Serializable {
+    private String transactionId;
+    private Integer payMoney;
+
+    public String getTransactionId() {
+        return transactionId;
+    }
+
+    public void setTransactionId(String transactionId) {
+        this.transactionId = transactionId;
+    }
+
+    public Integer getPayMoney() {
+        return payMoney;
+    }
+
+    public void setPayMoney(Integer payMoney) {
+        this.payMoney = payMoney;
+    }
+
+    public PayDto(String transactionId, Integer payMoney) {
+        this.transactionId = transactionId;
+        this.payMoney = payMoney;
+    }
+
+    public PayDto() {
+    }
+
+}

+ 3 - 0
src/main/java/com/zhentao/common/orders/service/OrdersService.java

@@ -4,6 +4,7 @@ package com.zhentao.common.orders.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhentao.common.orders.domain.Orders;
 import com.zhentao.common.orders.dto.OrdersDto;
+import com.zhentao.common.orders.dto.PayDto;
 import com.zhentao.util.ResultVo;
 
 /**
@@ -16,4 +17,6 @@ public interface OrdersService extends IService<Orders> {
     ResultVo add(OrdersDto ordersDto);
 
     ResultVo findAll();
+
+    ResultVo generateOrder(PayDto payDto) throws Exception;
 }

+ 33 - 1
src/main/java/com/zhentao/common/orders/service/impl/OrdersServiceImpl.java

@@ -3,19 +3,22 @@ package com.zhentao.common.orders.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.wxpay.sdk.WXPayUtil;
 import com.zhentao.common.orders.domain.OrderDetails;
 import com.zhentao.common.orders.domain.Orders;
 import com.zhentao.common.orders.dto.OrdersDto;
+import com.zhentao.common.orders.dto.PayDto;
 import com.zhentao.common.orders.mapper.OrderDetailsMapper;
 import com.zhentao.common.orders.mapper.OrdersMapper;
 import com.zhentao.common.orders.service.OrdersService;
+import com.zhentao.util.HttpClient;
 import com.zhentao.util.ResultVo;
 import com.zhentao.util.SnowflakeIdGenerator;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.util.*;
 
 /**
 * @author lsk
@@ -52,6 +55,35 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders>
         List<Orders> orders = ordersMapper.selectList(queryWrapper);
         return ResultVo.OK(orders);
     }
+
+    @Override
+    public ResultVo generateOrder(PayDto payDto) throws Exception{
+        String transactionId = UUID.randomUUID().toString().replaceAll("-","");
+        Map map = new HashMap();
+        map.put("appid","wxab8acb865bb1637e");
+        map.put("mch_id","11473623");
+        map.put("body","拼团订单");
+        map.put("out_trade_no",transactionId);
+        map.put("total_fee",String.valueOf(payDto.getPayMoney()));
+        map.put("spbill_create_ip","127.0.0.1");
+        map.put("notify_url","127.0.0.1");
+        map.put("trade_type","NATIVE");
+        map.put("nonce_str", WXPayUtil.generateNonceStr());
+        String xmlParam = WXPayUtil.generateSignedXml(map,"2ab9071b06b9f739b950ddb41db2690d");
+        HttpClient httpClient = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");
+        httpClient.setXmlParam(xmlParam);
+        httpClient.isHttps();
+        httpClient.post();
+        String result = httpClient.getContent();
+        Map<String, String> data = WXPayUtil.xmlToMap(result);
+        Set<String> set = data.keySet();
+        for (String key:set){
+            System.out.println(key+":"+data.get(key));
+        }
+        String codeUrl = data.get("code_url");
+        return new ResultVo(200,"生成二维码成功",codeUrl);
+    }
+
 }
 
 

+ 1 - 1
src/main/java/com/zhentao/common/orders/vo/OrdersVo.java

@@ -1,4 +1,4 @@
-//package com.zhentao.common.orders.vo;
+package com.zhentao.common.orders.vo;//package com.zhentao.common.orders.vo;
 //
 //import com.zhentao.common.orders.domain.Orders;
 //import lombok.AllArgsConstructor;

+ 0 - 15
src/main/java/com/zhentao/common/service/MarketingCouponService.java

@@ -1,15 +0,0 @@
-package com.zhentao.common.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhentao.common.orders.domain.MarketingCoupon;
-
-/**
-* @author lsk
-* @description 针对表【marketing_coupon(优惠券表
-)】的数据库操作Service
-* @createDate 2025-05-08 17:30:15
-*/
-public interface MarketingCouponService extends IService<MarketingCoupon> {
-
-}

+ 0 - 15
src/main/java/com/zhentao/common/service/MarketingCouponUserService.java

@@ -1,15 +0,0 @@
-package com.zhentao.common.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhentao.common.orders.domain.MarketingCouponUser;
-
-/**
-* @author lsk
-* @description 针对表【marketing_coupon_user(用户优惠券表
-)】的数据库操作Service
-* @createDate 2025-05-08 17:30:15
-*/
-public interface MarketingCouponUserService extends IService<MarketingCouponUser> {
-
-}

+ 0 - 14
src/main/java/com/zhentao/common/service/OrderDetailsService.java

@@ -1,14 +0,0 @@
-package com.zhentao.common.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhentao.common.orders.domain.OrderDetails;
-
-/**
-* @author lsk
-* @description 针对表【order_details(订单明细表)】的数据库操作Service
-* @createDate 2025-05-08 17:30:15
-*/
-public interface OrderDetailsService extends IService<OrderDetails> {
-
-}

+ 0 - 19
src/main/java/com/zhentao/common/service/OrdersService.java

@@ -1,19 +0,0 @@
-package com.zhentao.common.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhentao.common.orders.domain.Orders;
-import com.zhentao.common.orders.dto.OrdersDto;
-import com.zhentao.util.ResultVo;
-
-/**
-* @author lsk
-* @description 针对表【orders(订单表)】的数据库操作Service
-* @createDate 2025-05-08 17:30:15
-*/
-public interface OrdersService extends IService<Orders> {
-
-    ResultVo add(OrdersDto ordersDto);
-
-    ResultVo findAll();
-}

+ 0 - 24
src/main/java/com/zhentao/common/service/impl/MarketingCouponServiceImpl.java

@@ -1,24 +0,0 @@
-package com.zhentao.common.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.common.orders.domain.MarketingCoupon;
-import com.zhentao.common.orders.mapper.MarketingCouponMapper;
-import com.zhentao.common.service.MarketingCouponService;
-import org.springframework.stereotype.Service;
-
-/**
-* @author lsk
-* @description 针对表【marketing_coupon(优惠券表
-)】的数据库操作Service实现
-* @createDate 2025-05-08 17:30:15
-*/
-@Service
-public class MarketingCouponServiceImpl extends ServiceImpl<MarketingCouponMapper, MarketingCoupon>
-    implements MarketingCouponService {
-
-}
-
-
-
-

+ 0 - 24
src/main/java/com/zhentao/common/service/impl/MarketingCouponUserServiceImpl.java

@@ -1,24 +0,0 @@
-package com.zhentao.common.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.common.orders.domain.MarketingCouponUser;
-import com.zhentao.common.orders.mapper.MarketingCouponUserMapper;
-import com.zhentao.common.service.MarketingCouponUserService;
-import org.springframework.stereotype.Service;
-
-/**
-* @author lsk
-* @description 针对表【marketing_coupon_user(用户优惠券表
-)】的数据库操作Service实现
-* @createDate 2025-05-08 17:30:15
-*/
-@Service
-public class MarketingCouponUserServiceImpl extends ServiceImpl<MarketingCouponUserMapper, MarketingCouponUser>
-    implements MarketingCouponUserService {
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/common/service/impl/OrderDetailsServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.common.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.common.orders.domain.OrderDetails;
-import com.zhentao.common.orders.mapper.OrderDetailsMapper;
-import com.zhentao.common.service.OrderDetailsService;
-import org.springframework.stereotype.Service;
-
-/**
-* @author lsk
-* @description 针对表【order_details(订单明细表)】的数据库操作Service实现
-* @createDate 2025-05-08 17:30:15
-*/
-@Service
-public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, OrderDetails>
-    implements OrderDetailsService {
-
-}
-
-
-
-

+ 0 - 59
src/main/java/com/zhentao/common/service/impl/OrdersServiceImpl.java

@@ -1,59 +0,0 @@
-package com.zhentao.common.service.impl;
-
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.common.orders.domain.OrderDetails;
-import com.zhentao.common.orders.domain.Orders;
-import com.zhentao.common.orders.dto.OrdersDto;
-import com.zhentao.common.orders.mapper.OrderDetailsMapper;
-import com.zhentao.common.orders.mapper.OrdersMapper;
-import com.zhentao.common.service.OrdersService;
-import com.zhentao.util.ResultVo;
-import com.zhentao.util.SnowflakeIdGenerator;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
-* @author lsk
-* @description 针对表【orders(订单表)】的数据库操作Service实现
-* @createDate 2025-05-08 17:30:15
-*/
-@Service
-public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders>
-    implements OrdersService {
-    @Autowired
-    private OrdersMapper ordersMapper;
-    @Autowired
-    private OrderDetailsMapper orderDetailsMapper;
-
-    @Override
-    public ResultVo add(OrdersDto ordersDto) {
-        Orders orders = new Orders();
-        OrderDetails orderDetails = new OrderDetails();
-        BeanUtils.copyProperties(ordersDto , orders);
-        BeanUtils.copyProperties(ordersDto , orderDetails);
-        orders.setOrdersId(SnowflakeIdGenerator.getSnowId());
-        orderDetails.setDetailId(SnowflakeIdGenerator.getSnowId());
-        int i = ordersMapper.insert(orders);
-        int i1 = orderDetailsMapper.insert(orderDetails);
-        if(i > 0 && i1 > 0 ){
-            return ResultVo.OK();
-        }
-        return ResultVo.ERROR();
-    }
-
-    @Override
-    public ResultVo findAll() {
-        QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();
-        List<Orders> orders = ordersMapper.selectList(queryWrapper);
-        return ResultVo.OK(orders);
-    }
-}
-
-
-
-

+ 8 - 1
src/main/java/com/zhentao/common/user/controller/LoginController.java

@@ -30,4 +30,11 @@ public class LoginController {
     public ResultVo getCode(@RequestBody GooseUser user){
         return gooseUserService.getCode(user);
     }
-}
+
+//    查询用户信息
+    @RequestMapping("getUid")
+    public ResultVo getUid(){
+
+        return gooseUserService.getUid();
+    }
+}

+ 3 - 0
src/main/java/com/zhentao/common/user/service/GooseUserService.java

@@ -21,4 +21,7 @@ public interface GooseUserService extends IService<GooseUser> {
     ResultVo getCode(GooseUser user);
 
     ResultVo login(LoginDto loginDto,HttpServletRequest request);
+//查询用户信息
+
+    ResultVo getUid();
 }

+ 29 - 1
src/main/java/com/zhentao/common/user/service/impl/GooseUserServiceImpl.java

@@ -90,6 +90,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
                     System.out.println("请求IP: " + requestIp);
                     location.setReqIp(requestIp);
                     userLocationMapper.insert(location);
+                    Jedis jedis=new Jedis("localhost");
+                    jedis.set("token", token);
+                    jedis.close();
                     return ResultVo.OK(token);
                 }
                 if(StringUtils.checkValNotNull(loginDto.getCode())){
@@ -117,6 +120,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
                         System.out.println("请求IP: " + requestIp);
                         location.setReqIp(requestIp);
                         userLocationMapper.insert(location);
+                        Jedis jedis1=new Jedis("localhost");
+                        jedis1.set("token", token);
+                        jedis1.close();
                         return ResultVo.OK(token);
                     }
                 }
@@ -145,6 +151,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
                     System.out.println("请求IP: " + requestIp);
                     location.setReqIp(requestIp);
                     userLocationMapper.insert(location);
+                    Jedis jedis=new Jedis("localhost");
+                    jedis.set("token", token);
+                    jedis.close();
                     return ResultVo.OK(token);
                 }
                 return ResultVo.ERROR();
@@ -171,6 +180,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
                     System.out.println("请求IP: " + requestIp);
                     location.setReqIp(requestIp);
                     userLocationMapper.insert(location);
+                    Jedis jedis1=new Jedis("localhost");
+                    jedis1.set("token", token);
+                    jedis1.close();
                     return ResultVo.OK(token);
                 }
             }
@@ -178,6 +190,17 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
         return ResultVo.ERROR();
     }
 
+    @Override
+    public ResultVo getUid() {
+        Jedis jedis=new Jedis("localhost");
+        String token = jedis.get("token");
+        System.err.println(token);
+        Long id = (Long) AppJwtUtil.getClaimsBody(token).get("id");
+        System.err.println(id);
+        System.err.println(userMapper.selectById(id));
+        return ResultVo.OK(userMapper.selectById(id));
+    }
+
     @SneakyThrows
     @Override
     public ResultVo Wxlogin(Map<String, String> requestData, HttpServletRequest request) {
@@ -216,7 +239,6 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
             String session_key=(String) result.get("session_key");
             queryWrapper.eq("open_id",openId);
             GooseUser gooseUser = userMapper.selectOne(queryWrapper);
-            System.out.println(gooseUser);
             if(gooseUser==null){
                 GooseUser user=new GooseUser();
                 user.setId(SnowflakeIdGenerator.getSnowId());
@@ -245,6 +267,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
                     System.out.println("请求IP: " + requestIp);
                     location.setReqIp(requestIp);
                     userLocationMapper.insert(location);
+                Jedis jedis=new Jedis("localhost");
+                jedis.set("token", token);
+                jedis.close();
                 return new ResultVo(CommonConstant.OK,"登录成功",token);
             }
             String userInfo = WXBizDataCryptUtil.decryptData(APPID, session_key, encryptedData, iv);
@@ -268,6 +293,9 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
             System.out.println("请求IP: " + requestIp);
             location.setReqIp(requestIp);
             userLocationMapper.insert(location);
+            Jedis jedis=new Jedis("localhost");
+             jedis.set("token", token);
+             jedis.close();
             return new ResultVo(CommonConstant.OK,"登录成功",token);
         } catch (HttpClientErrorException e) { // 处理 HTTP 错误(如 400、500)
             throw  new ApiException(CommonConstant.ERROR,"请求微信接口失败: " + e.getResponseBodyAsString());

+ 0 - 18
src/main/java/com/zhentao/config/CorsConfig.java

@@ -1,18 +0,0 @@
-//package com.zhentao.config;
-//
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.web.servlet.config.annotation.CorsRegistry;
-//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-//
-//@Configuration
-//public class CorsConfig implements WebMvcConfigurer {
-//
-//    @Override
-//    public void addCorsMappings(CorsRegistry registry) {
-//        registry.addMapping("/**")
-//                .allowedOrigins("*")
-//                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
-//                .maxAge(3600);
-//    }
-//
-//}

+ 0 - 81
src/main/java/com/zhentao/controller/WechatLoginController.java

@@ -1,81 +0,0 @@
-package com.zhentao.controller;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.client.HttpClientErrorException;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@RestController
-public class WechatLoginController {
-
-    private static final String APPID = "wx8246d27305af5834";
-    private static final String SECRET = "8badbee7a035911171cdccb13c67de30";
-    private static final ObjectMapper objectMapper = new ObjectMapper(); // JSON 解析器
-
-    @PostMapping("/api/wx-login")
-    public Map<String, Object> wxLogin( @RequestBody Map<String, String> requestData) {
-        String code = requestData.get("code");
-        System.out.println(code);
-        if (code == null) {
-            return buildErrorResponse("Missing code");
-        }
-
-        String url = "https://api.weixin.qq.com/sns/jscode2session?" +
-                "appid=" + APPID +
-                "&secret=" + SECRET +
-                "&js_code=" + code +
-                "&grant_type=authorization_code";
-        RestTemplate restTemplate = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        HttpEntity<String> entity = new HttpEntity<>(headers);
-
-        try {
-            // 改用 String 接收响应,兼容所有 Content-Type
-            ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
-            String responseBody = response.getBody();
-
-            System.out.println(responseBody);
-
-            // 手动解析 JSON
-            Map<String, Object> result = objectMapper.readValue(responseBody, Map.class);
-            System.out.println(result);
-            if (result.containsKey("errcode")) { // 微信错误响应
-                return buildErrorResponse("微信接口返回错误: " + result.get("errmsg"));
-            }
-            // 成功响应
-            return buildSuccessResponse((String) result.get("openid"), (String) result.get("session_key"));
-
-        } catch (HttpClientErrorException e) { // 处理 HTTP 错误(如 400、500)
-            return buildErrorResponse("请求微信接口失败: " + e.getResponseBodyAsString());
-        } catch (Exception e) { // 处理 JSON 解析错误
-            return buildErrorResponse("响应解析失败: " + e.getMessage());
-        }
-    }
-
-    // 构建成功响应
-    private Map<String, Object> buildSuccessResponse(String openid, String sessionKey) {
-        Map<String, Object> response = new HashMap<>();
-        System.out.println("openid:"+openid);
-        System.out.println("sessionKey:"+sessionKey);
-        response.put("openid", openid);
-        response.put("session_key", sessionKey);
-        return response;
-    }
-
-    // 构建错误响应
-    private Map<String, Object> buildErrorResponse(String message) {
-        Map<String, Object> response = new HashMap<>();
-        response.put("error", message);
-        return response;
-    }
-}

+ 0 - 18
src/main/java/com/zhentao/shiro/config/CorsConfig.java

@@ -1,18 +0,0 @@
-package com.zhentao.shiro.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class CorsConfig implements WebMvcConfigurer {
-
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-            .allowedOrigins("*")
-            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
-            .maxAge(3600);
-    }
-
-}

+ 294 - 295
src/main/java/com/zhentao/shiro/config/ShiroConfig.java

@@ -1,295 +1,294 @@
-
-
-package com.zhentao.shiro.config;
-
-import com.alibaba.fastjson.JSON;
-
-import com.zhentao.properties.JwtProperties;
-import com.zhentao.properties.ShiroPermissionProperties;
-import com.zhentao.properties.ShiroProperties;
-import com.zhentao.util.IniUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.Authenticator;
-import org.apache.shiro.authc.credential.CredentialsMatcher;
-import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
-import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
-import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
-import org.apache.shiro.mgt.DefaultSubjectDAO;
-import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.mgt.SessionStorageEvaluator;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.apache.shiro.web.mgt.DefaultWebSessionStorageEvaluator;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.filter.DelegatingFilterProxy;
-
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import java.util.*;
-
-/**
- * Shiro配置
- * https://shiro.apache.org/spring.html
- * https://shiro.apache.org/spring-boot.html
- **/
-@Slf4j
-@Configuration
-@EnableConfigurationProperties({ShiroProperties.class})
-@ConditionalOnProperty(value = {"spring-boot-jjj.shiro.enable"}, matchIfMissing = true)
-public class ShiroConfig {
-
-    /**
-     * JWT过滤器名称
-     */
-    private static final String JWT_FILTER_NAME = "jwtFilter";
-
-    /**
-     * Shiro过滤器名称
-     */
-    private static final String SHIRO_FILTER_NAME = "shiroFilter";
-
-    /**
-     * anon
-     */
-    private static final String ANON = "anon";
-
-
-    @Bean
-    public CredentialsMatcher credentialsMatcher() {
-        return new JwtCredentialsMatcher();
-    }
-
-    /**
-     * JWT数据源验证
-     *
-     * @return
-     */
-    @Bean
-    public JwtRealm jwtRealm() {
-        JwtRealm jwtRealm = new JwtRealm();
-//        jwtRealm.setCachingEnabled(false);
-        jwtRealm.setCredentialsMatcher(credentialsMatcher());
-        return jwtRealm;
-    }
-
-
-    @Bean
-    public SessionStorageEvaluator sessionStorageEvaluator() {
-        DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultWebSessionStorageEvaluator();
-        sessionStorageEvaluator.setSessionStorageEnabled(false);
-        return sessionStorageEvaluator;
-    }
-
-    @Bean
-    public DefaultSubjectDAO subjectDAO() {
-        DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO();
-        defaultSubjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator());
-        return defaultSubjectDAO;
-    }
-
-    /**
-     * 安全管理器配置
-     *
-     * @return
-     */
-    @Bean
-    public SecurityManager securityManager() {
-        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setRealm(jwtRealm());
-        securityManager.setSubjectDAO(subjectDAO());
-        SecurityUtils.setSecurityManager(securityManager);
-        return securityManager;
-    }
-
-    /**
-     * ShiroFilterFactoryBean配置
-     *
-     * @param securityManager
-     * @param shiroProperties
-     * @param jwtProperties
-     * @return
-     */
-    @Bean(SHIRO_FILTER_NAME)
-    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager,
-
-                                                         ShiroProperties shiroProperties,
-                                                         JwtProperties jwtProperties) {
-        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
-        shiroFilterFactoryBean.setSecurityManager(securityManager);
-        Map<String, Filter> filterMap = getFilterMap( jwtProperties);
-        shiroFilterFactoryBean.setFilters(filterMap);
-        Map<String, String> filterChainMap = null;
-        try {
-            filterChainMap = getFilterChainDefinitionMap(shiroProperties);
-
-        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return shiroFilterFactoryBean;
-    }
-
-
-    /**
-     * 获取filter map
-     *
-     * @return
-     */
-    private Map<String, Filter> getFilterMap(
-                                             JwtProperties jwtProperties) {
-        Map<String, Filter> filterMap = new LinkedHashMap<>();
-        filterMap.put(JWT_FILTER_NAME, new JwtFilter(jwtProperties));
-        return filterMap;
-    }
-
-
-    /**
-     * Shiro路径权限配置
-     *
-     * @return
-     */
-    private Map<String, String> getFilterChainDefinitionMap(ShiroProperties shiroProperties) throws Exception {
-        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
-        // 获取排除的路径
-        List<String[]> anonList = shiroProperties.getAnon();
-        log.debug("anonList:{}", JSON.toJSONString(anonList));
-        if (CollectionUtils.isNotEmpty(anonList)) {
-            anonList.forEach(anonArray -> {
-                if (ArrayUtils.isNotEmpty(anonArray)) {
-                    for (String anonPath : anonArray) {
-                        filterChainDefinitionMap.put(anonPath, ANON);
-                    }
-                }
-            });
-        }
-
-        // 获取ini格式配置
-        String definitions = shiroProperties.getFilterChainDefinitions();
-        if (StringUtils.isNotBlank(definitions)) {
-            Map<String, String> section = IniUtil.parseIni(definitions);
-            log.debug("definitions:{}", JSON.toJSONString(section));
-            for (Map.Entry<String, String> entry : section.entrySet()) {
-                filterChainDefinitionMap.put(entry.getKey(), entry.getValue());
-            }
-        }
-
-        // 获取自定义权限路径配置集合
-        List<ShiroPermissionProperties> permissionConfigs = shiroProperties.getPermission();
-        log.debug("permissionConfigs:{}", JSON.toJSONString(permissionConfigs));
-        if (CollectionUtils.isNotEmpty(permissionConfigs)) {
-            for (ShiroPermissionProperties permissionConfig : permissionConfigs) {
-                String url = permissionConfig.getUrl();
-                String[] urls = permissionConfig.getUrls();
-                String permission = permissionConfig.getPermission();
-                if (StringUtils.isBlank(url) && ArrayUtils.isEmpty(urls)) {
-                    throw new Exception("shiro permission config 路径配置不能为空");
-                }
-                if (StringUtils.isBlank(permission)) {
-                    throw new Exception("shiro permission config permission不能为空");
-                }
-
-                if (StringUtils.isNotBlank(url)) {
-                    filterChainDefinitionMap.put(url, permission);
-                }
-                if (ArrayUtils.isNotEmpty(urls)) {
-                    for (String string : urls) {
-                        filterChainDefinitionMap.put(string, permission);
-                    }
-                }
-            }
-        }
-
-        // 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行
-        if (shiroProperties.isEnable()) {
-            filterChainDefinitionMap.put("/**", JWT_FILTER_NAME);
-        } else {
-            filterChainDefinitionMap.put("/**", ANON);
-        }
-
-        log.debug("filterChainMap:{}", JSON.toJSONString(filterChainDefinitionMap));
-
-        // 添加默认的filter
-        Map<String, String> newFilterChainDefinitionMap = addDefaultFilterDefinition(filterChainDefinitionMap);
-        return newFilterChainDefinitionMap;
-    }
-
-    /**
-     * 添加默认的filter权限过滤
-     *
-     * @param filterChainDefinitionMap
-     * @return
-     */
-    private Map<String, String> addDefaultFilterDefinition(Map<String, String> filterChainDefinitionMap) {
-        if (MapUtils.isEmpty(filterChainDefinitionMap)) {
-            return filterChainDefinitionMap;
-        }
-        final Map<String, String> map = new LinkedHashMap<>();
-        for (Map.Entry<String, String> entry : filterChainDefinitionMap.entrySet()) {
-            String key = entry.getKey();
-            String value = entry.getValue();
-            String definition;
-            String[] strings = value.split(",");
-            List<String> list = new ArrayList<>();
-            list.addAll(Arrays.asList(strings));
-            definition = String.join(",", list);
-            map.put(key, definition);
-        }
-        return map;
-    }
-
-    /**
-     * ShiroFilter配置
-     *
-     * @return
-     */
-    @Bean
-    public FilterRegistrationBean delegatingFilterProxy() {
-        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
-        DelegatingFilterProxy proxy = new DelegatingFilterProxy();
-        proxy.setTargetFilterLifecycle(true);
-        proxy.setTargetBeanName(SHIRO_FILTER_NAME);
-        filterRegistrationBean.setFilter(proxy);
-        filterRegistrationBean.setAsyncSupported(true);
-        filterRegistrationBean.setEnabled(true);
-        filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
-        return filterRegistrationBean;
-    }
-
-    @Bean
-    public Authenticator authenticator() {
-        ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
-        authenticator.setRealms(Arrays.asList(jwtRealm()));
-        authenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
-        return authenticator;
-    }
-
-
-    /**
-     * Enabling Shiro Annotations
-     *
-     * @return
-     */
-    @Bean
-    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-        return new LifecycleBeanPostProcessor();
-    }
-
-    @Bean
-    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
-        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
-        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
-        return authorizationAttributeSourceAdvisor;
-    }
-
-}
+//
+//
+//package com.zhentao.shiro.config;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.zhentao.properties.JwtProperties;
+//import com.zhentao.properties.ShiroPermissionProperties;
+//import com.zhentao.properties.ShiroProperties;
+//import com.zhentao.util.IniUtil;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.collections.CollectionUtils;
+//import org.apache.commons.collections.MapUtils;
+//import org.apache.commons.lang3.ArrayUtils;
+//import org.apache.commons.lang3.StringUtils;
+//import org.apache.shiro.SecurityUtils;
+//import org.apache.shiro.authc.Authenticator;
+//import org.apache.shiro.authc.credential.CredentialsMatcher;
+//import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
+//import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
+//import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
+//import org.apache.shiro.mgt.DefaultSubjectDAO;
+//import org.apache.shiro.mgt.SecurityManager;
+//import org.apache.shiro.mgt.SessionStorageEvaluator;
+//import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+//import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
+//import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+//import org.apache.shiro.web.mgt.DefaultWebSessionStorageEvaluator;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+//import org.springframework.boot.context.properties.EnableConfigurationProperties;
+//import org.springframework.boot.web.servlet.FilterRegistrationBean;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.web.filter.DelegatingFilterProxy;
+//
+//import javax.servlet.DispatcherType;
+//import javax.servlet.Filter;
+//import java.util.*;
+//
+///**
+// * Shiro配置
+// * https://shiro.apache.org/spring.html
+// * https://shiro.apache.org/spring-boot.html
+// **/
+//@Slf4j
+//@Configuration
+//@EnableConfigurationProperties({ShiroProperties.class})
+//@ConditionalOnProperty(value = {"spring-boot-jjj.shiro.enable"}, matchIfMissing = true)
+//public class ShiroConfig {
+//
+//    /**
+//     * JWT过滤器名称
+//     */
+//    private static final String JWT_FILTER_NAME = "jwtFilter";
+//
+//    /**
+//     * Shiro过滤器名称
+//     */
+//    private static final String SHIRO_FILTER_NAME = "shiroFilter";
+//
+//    /**
+//     * anon
+//     */
+//    private static final String ANON = "anon";
+//
+//
+//    @Bean
+//    public CredentialsMatcher credentialsMatcher() {
+//        return new JwtCredentialsMatcher();
+//    }
+//
+//    /**
+//     * JWT数据源验证
+//     *
+//     * @return
+//     */
+//    @Bean
+//    public JwtRealm jwtRealm() {
+//        JwtRealm jwtRealm = new JwtRealm();
+////        jwtRealm.setCachingEnabled(false);
+//        jwtRealm.setCredentialsMatcher(credentialsMatcher());
+//        return jwtRealm;
+//    }
+//
+//
+//    @Bean
+//    public SessionStorageEvaluator sessionStorageEvaluator() {
+//        DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultWebSessionStorageEvaluator();
+//        sessionStorageEvaluator.setSessionStorageEnabled(false);
+//        return sessionStorageEvaluator;
+//    }
+//
+//    @Bean
+//    public DefaultSubjectDAO subjectDAO() {
+//        DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO();
+//        defaultSubjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator());
+//        return defaultSubjectDAO;
+//    }
+//
+//    /**
+//     * 安全管理器配置
+//     *
+//     * @return
+//     */
+//    @Bean
+//    public SecurityManager securityManager() {
+//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+//        securityManager.setRealm(jwtRealm());
+//        securityManager.setSubjectDAO(subjectDAO());
+//        SecurityUtils.setSecurityManager(securityManager);
+//        return securityManager;
+//    }
+//
+//    /**
+//     * ShiroFilterFactoryBean配置
+//     *
+//     * @param securityManager
+//     * @param shiroProperties
+//     * @param jwtProperties
+//     * @return
+//     */
+//    @Bean(SHIRO_FILTER_NAME)
+//    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager,
+//
+//                                                         ShiroProperties shiroProperties,
+//                                                         JwtProperties jwtProperties) {
+//        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+//        shiroFilterFactoryBean.setSecurityManager(securityManager);
+//        Map<String, Filter> filterMap = getFilterMap( jwtProperties);
+//        shiroFilterFactoryBean.setFilters(filterMap);
+//        Map<String, String> filterChainMap = null;
+//        try {
+//            filterChainMap = getFilterChainDefinitionMap(shiroProperties);
+//
+//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return shiroFilterFactoryBean;
+//    }
+//
+//
+//    /**
+//     * 获取filter map
+//     *
+//     * @return
+//     */
+//    private Map<String, Filter> getFilterMap(
+//                                             JwtProperties jwtProperties) {
+//        Map<String, Filter> filterMap = new LinkedHashMap<>();
+//        filterMap.put(JWT_FILTER_NAME, new JwtFilter(jwtProperties));
+//        return filterMap;
+//    }
+//
+//
+//    /**
+//     * Shiro路径权限配置
+//     *
+//     * @return
+//     */
+//    private Map<String, String> getFilterChainDefinitionMap(ShiroProperties shiroProperties) throws Exception {
+//        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
+//        // 获取排除的路径
+//        List<String[]> anonList = shiroProperties.getAnon();
+//        log.debug("anonList:{}", JSON.toJSONString(anonList));
+//        if (CollectionUtils.isNotEmpty(anonList)) {
+//            anonList.forEach(anonArray -> {
+//                if (ArrayUtils.isNotEmpty(anonArray)) {
+//                    for (String anonPath : anonArray) {
+//                        filterChainDefinitionMap.put(anonPath, ANON);
+//                    }
+//                }
+//            });
+//        }
+//
+//        // 获取ini格式配置
+//        String definitions = shiroProperties.getFilterChainDefinitions();
+//        if (StringUtils.isNotBlank(definitions)) {
+//            Map<String, String> section = IniUtil.parseIni(definitions);
+//            log.debug("definitions:{}", JSON.toJSONString(section));
+//            for (Map.Entry<String, String> entry : section.entrySet()) {
+//                filterChainDefinitionMap.put(entry.getKey(), entry.getValue());
+//            }
+//        }
+//
+//        // 获取自定义权限路径配置集合
+//        List<ShiroPermissionProperties> permissionConfigs = shiroProperties.getPermission();
+//        log.debug("permissionConfigs:{}", JSON.toJSONString(permissionConfigs));
+//        if (CollectionUtils.isNotEmpty(permissionConfigs)) {
+//            for (ShiroPermissionProperties permissionConfig : permissionConfigs) {
+//                String url = permissionConfig.getUrl();
+//                String[] urls = permissionConfig.getUrls();
+//                String permission = permissionConfig.getPermission();
+//                if (StringUtils.isBlank(url) && ArrayUtils.isEmpty(urls)) {
+//                    throw new Exception("shiro permission config 路径配置不能为空");
+//                }
+//                if (StringUtils.isBlank(permission)) {
+//                    throw new Exception("shiro permission config permission不能为空");
+//                }
+//
+//                if (StringUtils.isNotBlank(url)) {
+//                    filterChainDefinitionMap.put(url, permission);
+//                }
+//                if (ArrayUtils.isNotEmpty(urls)) {
+//                    for (String string : urls) {
+//                        filterChainDefinitionMap.put(string, permission);
+//                    }
+//                }
+//            }
+//        }
+//
+//        // 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行
+//        if (shiroProperties.isEnable()) {
+//            filterChainDefinitionMap.put("/**", JWT_FILTER_NAME);
+//        } else {
+//            filterChainDefinitionMap.put("/**", ANON);
+//        }
+//
+//        log.debug("filterChainMap:{}", JSON.toJSONString(filterChainDefinitionMap));
+//
+//        // 添加默认的filter
+//        Map<String, String> newFilterChainDefinitionMap = addDefaultFilterDefinition(filterChainDefinitionMap);
+//        return newFilterChainDefinitionMap;
+//    }
+//
+//    /**
+//     * 添加默认的filter权限过滤
+//     *
+//     * @param filterChainDefinitionMap
+//     * @return
+//     */
+//    private Map<String, String> addDefaultFilterDefinition(Map<String, String> filterChainDefinitionMap) {
+//        if (MapUtils.isEmpty(filterChainDefinitionMap)) {
+//            return filterChainDefinitionMap;
+//        }
+//        final Map<String, String> map = new LinkedHashMap<>();
+//        for (Map.Entry<String, String> entry : filterChainDefinitionMap.entrySet()) {
+//            String key = entry.getKey();
+//            String value = entry.getValue();
+//            String definition;
+//            String[] strings = value.split(",");
+//            List<String> list = new ArrayList<>();
+//            list.addAll(Arrays.asList(strings));
+//            definition = String.join(",", list);
+//            map.put(key, definition);
+//        }
+//        return map;
+//    }
+//
+//    /**
+//     * ShiroFilter配置
+//     *
+//     * @return
+//     */
+//    @Bean
+//    public FilterRegistrationBean delegatingFilterProxy() {
+//        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
+//        DelegatingFilterProxy proxy = new DelegatingFilterProxy();
+//        proxy.setTargetFilterLifecycle(true);
+//        proxy.setTargetBeanName(SHIRO_FILTER_NAME);
+//        filterRegistrationBean.setFilter(proxy);
+//        filterRegistrationBean.setAsyncSupported(true);
+//        filterRegistrationBean.setEnabled(true);
+//        filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
+//        return filterRegistrationBean;
+//    }
+//
+//    @Bean
+//    public Authenticator authenticator() {
+//        ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
+//        authenticator.setRealms(Arrays.asList(jwtRealm()));
+//        authenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
+//        return authenticator;
+//    }
+//
+//
+//    /**
+//     * Enabling Shiro Annotations
+//     *
+//     * @return
+//     */
+//    @Bean
+//    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+//        return new LifecycleBeanPostProcessor();
+//    }
+//
+//    @Bean
+//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
+//        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
+//        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
+//        return authorizationAttributeSourceAdvisor;
+//    }
+//
+//}

+ 1 - 2
src/main/java/com/zhentao/shiro/utils/JwtToken.java

@@ -3,7 +3,6 @@
 package com.zhentao.shiro.utils;
 
 import com.auth0.jwt.interfaces.DecodedJWT;
-
 import com.zhentao.util.IpUtil;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -18,7 +17,7 @@ import java.util.Date;
 @Accessors(chain = true)
 public class JwtToken implements HostAuthenticationToken {
 	private static final long serialVersionUID = 5101247566043093405L;
-	
+
 	/**
      * 登录ip
      */

+ 169 - 0
src/main/java/com/zhentao/util/HttpClient.java

@@ -0,0 +1,169 @@
+package com.zhentao.util;
+
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.*;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLContextBuilder;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import java.io.IOException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * http请求客户端
+ * 
+ * @author Administrator
+ * 
+ */
+public class HttpClient {
+   private String url;
+   private Map<String, String> param;
+   private int statusCode;
+   private String content;
+   private String xmlParam;
+   private boolean isHttps;
+
+   public boolean isHttps() {
+      return isHttps;
+   }
+
+   public void setHttps(boolean isHttps) {
+      this.isHttps = isHttps;
+   }
+
+   public String getXmlParam() {
+      return xmlParam;
+   }
+
+   public void setXmlParam(String xmlParam) {
+      this.xmlParam = xmlParam;
+   }
+
+   public HttpClient(String url, Map<String, String> param) {
+      this.url = url;
+      this.param = param;
+   }
+
+   public HttpClient(String url) {
+      this.url = url;
+   }
+
+   public void setParameter(Map<String, String> map) {
+      param = map;
+   }
+
+   public void addParameter(String key, String value) {
+      if (param == null)
+         param = new HashMap<String, String>();
+      param.put(key, value);
+   }
+
+   public void post() throws ClientProtocolException, IOException {
+      HttpPost http = new HttpPost(url);
+      setEntity(http);
+      execute(http);
+   }
+
+   public void put() throws ClientProtocolException, IOException {
+      HttpPut http = new HttpPut(url);
+      setEntity(http);
+      execute(http);
+   }
+
+   public void get() throws ClientProtocolException, IOException {
+      if (param != null) {
+         StringBuilder url = new StringBuilder(this.url);
+         boolean isFirst = true;
+         for (String key : param.keySet()) {
+            if (isFirst)
+               url.append("?");
+            else
+               url.append("&");
+            url.append(key).append("=").append(param.get(key));
+         }
+         this.url = url.toString();
+      }
+      HttpGet http = new HttpGet(url);
+      execute(http);
+   }
+
+   /**
+    * set http post,put param
+    */
+   private void setEntity(HttpEntityEnclosingRequestBase http) {
+      if (param != null) {
+         List<NameValuePair> nvps = new LinkedList<NameValuePair>();
+         for (String key : param.keySet())
+            nvps.add(new BasicNameValuePair(key, param.get(key))); // 参数
+         http.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); // 设置参数
+      }
+      if (xmlParam != null) {
+         http.setEntity(new StringEntity(xmlParam, Consts.UTF_8));
+      }
+   }
+
+   private void execute(HttpUriRequest http) throws ClientProtocolException,
+         IOException {
+      CloseableHttpClient httpClient = null;
+      try {
+         if (isHttps) {
+            SSLContext sslContext = new SSLContextBuilder()
+                  .loadTrustMaterial(null, new TrustStrategy() {
+                     // 信任所有
+                     public boolean isTrusted(X509Certificate[] chain,
+                           String authType)
+                           throws CertificateException {
+                        return true;
+                     }
+                  }).build();
+            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+                  sslContext);
+            httpClient = HttpClients.custom().setSSLSocketFactory(sslsf)
+                  .build();
+         } else {
+            httpClient = HttpClients.createDefault();
+         }
+         CloseableHttpResponse response = httpClient.execute(http);
+         try {
+            if (response != null) {
+               if (response.getStatusLine() != null)
+                  statusCode = response.getStatusLine().getStatusCode();
+               HttpEntity entity = response.getEntity();
+               // 响应内容
+               content = EntityUtils.toString(entity, Consts.UTF_8);
+            }
+         } finally {
+            response.close();
+         }
+      } catch (Exception e) {
+         e.printStackTrace();
+      } finally {
+         httpClient.close();
+      }
+   }
+
+   public int getStatusCode() {
+      return statusCode;
+   }
+
+   public String getContent() throws ParseException, IOException {
+      return content;
+   }
+
+}

+ 1 - 0
src/main/resources/mapper/ProductMapper.xml

@@ -11,6 +11,7 @@
             <result property="subtitle" column="subtitle" jdbcType="VARCHAR"/>
             <result property="mainImage" column="main_image" jdbcType="VARCHAR"/>
             <result property="images" column="images" jdbcType="VARCHAR"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
             <result property="detail" column="detail" jdbcType="VARCHAR"/>
             <result property="status" column="status" jdbcType="TINYINT"/>
             <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>