| @ -0,0 +1,31 @@ | |||
| package com.ruoyi.applet.contoller; | |||
| import com.ruoyi.common.annotation.Anonymous; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| import com.ruoyi.model.service.IAppBannerService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import java.util.List; | |||
| @Api("轮播图") | |||
| @RestController | |||
| @RequestMapping("/applet/banner") | |||
| public class AppletBannerController { | |||
| //1.查询轮播图接口 | |||
| @Autowired | |||
| private IAppBannerService iAppBannerService; | |||
| @Anonymous | |||
| @ApiOperation("轮播图列表") | |||
| @GetMapping("/list") | |||
| public List<AppBanner> list(){ | |||
| return iAppBannerService.getBannerList(); | |||
| } | |||
| } | |||
| @ -0,0 +1,17 @@ | |||
| package com.ruoyi.applet.contoller; | |||
| import io.swagger.annotations.Api; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| @Api("获取个人信息") | |||
| @RestController | |||
| @RequestMapping("/applet/Info") | |||
| public class AppletInfoController { | |||
| //1.获取个人信息 | |||
| //2.获取分享海报 | |||
| //3.获取我的用户信息列表(分页) | |||
| //4.通过我的用户信息中用户ID查看订单详情接口 | |||
| // | |||
| } | |||
| @ -0,0 +1,40 @@ | |||
| package com.ruoyi.applet.contoller; | |||
| import com.ruoyi.applet.domain.AppletLoginRequest; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.springframework.beans.BeanUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.data.domain.Page; | |||
| import org.springframework.data.domain.PageImpl; | |||
| import org.springframework.data.domain.Pageable; | |||
| import org.springframework.http.ResponseEntity; | |||
| 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; | |||
| import java.util.ArrayList; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| @Api("伴宠师登录") | |||
| @RestController | |||
| @RequestMapping("/applet/login") | |||
| public class AppletLoginController { | |||
| // @Autowired | |||
| //1.微信授权登录接口 | |||
| //2.获取微信手机号接口 | |||
| //3.获取用户协议和隐私政策(用一个config拉取) | |||
| // @Aonymous | |||
| @ApiOperation("登录接口") | |||
| @PostMapping("/login") | |||
| public ResponseEntity login(@RequestBody AppletLoginRequest appletLoginRequest){ | |||
| Map<String,Object> hashMap = new HashMap(); | |||
| hashMap.put("userInfo",appletLoginRequest); | |||
| hashMap.put("token",123); | |||
| return ResponseEntity.ok(hashMap); | |||
| } | |||
| } | |||
| @ -0,0 +1,13 @@ | |||
| package com.ruoyi.applet.contoller; | |||
| import io.swagger.annotations.Api; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| @Api("工作台") | |||
| @RestController | |||
| @RequestMapping("/applet/work") | |||
| public class AppletWorkController { | |||
| //1.获取用户的状态,判断是否加入 | |||
| //2.从工作台配置表获取图标和说明 | |||
| } | |||
| @ -0,0 +1,8 @@ | |||
| package com.ruoyi.applet.domain; | |||
| import lombok.Data; | |||
| @Data | |||
| public class AppletLoginRequest { | |||
| private String code; | |||
| } | |||
| @ -0,0 +1,7 @@ | |||
| package com.ruoyi.applet.service; | |||
| import org.springframework.http.ResponseEntity; | |||
| public interface IAppletBannerService { | |||
| ResponseEntity getBannerList(); | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package com.ruoyi.applet.service.impl; | |||
| import com.ruoyi.applet.service.IAppletBannerService; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| import com.ruoyi.model.service.IAppBannerService; | |||
| import com.ruoyi.system.service.IBasicServicesService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.http.ResponseEntity; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.List; | |||
| @Service | |||
| public class AppletBannerServiceImpl implements IAppletBannerService { | |||
| @Autowired | |||
| private IAppBannerService iAppBannerService; | |||
| @Override | |||
| public ResponseEntity getBannerList() { | |||
| List<AppBanner> bannerList = iAppBannerService.getBannerList(); | |||
| return ResponseEntity.ok(bannerList); | |||
| } | |||
| } | |||
| @ -0,0 +1,104 @@ | |||
| package com.ruoyi.model.controller; | |||
| import java.io.IOException; | |||
| import java.util.List; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import org.springframework.security.access.prepost.PreAuthorize; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.PutMapping; | |||
| import org.springframework.web.bind.annotation.DeleteMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import com.ruoyi.common.annotation.Log; | |||
| import com.ruoyi.common.core.controller.BaseController; | |||
| import com.ruoyi.common.core.domain.AjaxResult; | |||
| import com.ruoyi.common.enums.BusinessType; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| import com.ruoyi.model.service.IAppBannerService; | |||
| import com.ruoyi.common.utils.poi.ExcelUtil; | |||
| import com.ruoyi.common.core.page.TableDataInfo; | |||
| /** | |||
| * 轮播图Controller | |||
| * | |||
| * @author ruoyi | |||
| * @date 2025-03-04 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/model/banner") | |||
| public class AppBannerController extends BaseController | |||
| { | |||
| @Autowired | |||
| private IAppBannerService appBannerService; | |||
| /** | |||
| * 查询轮播图列表 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:list')") | |||
| @GetMapping("/list") | |||
| public TableDataInfo list(AppBanner appBanner) | |||
| { | |||
| startPage(); | |||
| List<AppBanner> list = appBannerService.selectAppBannerList(appBanner); | |||
| return getDataTable(list); | |||
| } | |||
| /** | |||
| * 导出轮播图列表 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:export')") | |||
| @Log(title = "轮播图", businessType = BusinessType.EXPORT) | |||
| @PostMapping("/export") | |||
| public void export(HttpServletResponse response, AppBanner appBanner) throws IOException { | |||
| List<AppBanner> list = appBannerService.selectAppBannerList(appBanner); | |||
| ExcelUtil<AppBanner> util = new ExcelUtil<AppBanner>(AppBanner.class); | |||
| util.exportExcel(response, list, "轮播图数据"); | |||
| } | |||
| /** | |||
| * 获取轮播图详细信息 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:query')") | |||
| @GetMapping(value = "/{id}") | |||
| public AjaxResult getInfo(@PathVariable("id") Long id) | |||
| { | |||
| return success(appBannerService.selectAppBannerById(id)); | |||
| } | |||
| /** | |||
| * 新增轮播图 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:add')") | |||
| @Log(title = "轮播图", businessType = BusinessType.INSERT) | |||
| @PostMapping | |||
| public AjaxResult add(@RequestBody AppBanner appBanner) | |||
| { | |||
| return toAjax(appBannerService.insertAppBanner(appBanner)); | |||
| } | |||
| /** | |||
| * 修改轮播图 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:edit')") | |||
| @Log(title = "轮播图", businessType = BusinessType.UPDATE) | |||
| @PutMapping | |||
| public AjaxResult edit(@RequestBody AppBanner appBanner) | |||
| { | |||
| return toAjax(appBannerService.updateAppBanner(appBanner)); | |||
| } | |||
| /** | |||
| * 删除轮播图 | |||
| */ | |||
| @PreAuthorize("@ss.hasPermi('model:banner:remove')") | |||
| @Log(title = "轮播图", businessType = BusinessType.DELETE) | |||
| @DeleteMapping("/{ids}") | |||
| public AjaxResult remove(@PathVariable Long[] ids) | |||
| { | |||
| return toAjax(appBannerService.deleteAppBannerByIds(ids)); | |||
| } | |||
| } | |||
| @ -0,0 +1,83 @@ | |||
| package com.ruoyi.model.domain; | |||
| import org.apache.commons.lang3.builder.ToStringBuilder; | |||
| import org.apache.commons.lang3.builder.ToStringStyle; | |||
| import com.ruoyi.common.annotation.Excel; | |||
| import com.ruoyi.common.core.domain.BaseEntity; | |||
| /** | |||
| * 轮播图对象 app_banner | |||
| * | |||
| * @author ruoyi | |||
| * @date 2025-03-04 | |||
| */ | |||
| public class AppBanner extends BaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** $column.columnComment */ | |||
| private Long id; | |||
| /** 轮播图图片 | |||
| */ | |||
| @Excel(name = "轮播图图片 ") | |||
| private String image; | |||
| /** 跳转链接 */ | |||
| @Excel(name = "跳转链接") | |||
| private String url; | |||
| /** 逻辑删除标识 */ | |||
| private Long delFlag; | |||
| public void setId(Long id) | |||
| { | |||
| this.id = id; | |||
| } | |||
| public Long getId() | |||
| { | |||
| return id; | |||
| } | |||
| public void setImage(String image) | |||
| { | |||
| this.image = image; | |||
| } | |||
| public String getImage() | |||
| { | |||
| return image; | |||
| } | |||
| public void setUrl(String url) | |||
| { | |||
| this.url = url; | |||
| } | |||
| public String getUrl() | |||
| { | |||
| return url; | |||
| } | |||
| public void setDelFlag(Long delFlag) | |||
| { | |||
| this.delFlag = delFlag; | |||
| } | |||
| public Long getDelFlag() | |||
| { | |||
| return delFlag; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |||
| .append("id", getId()) | |||
| .append("image", getImage()) | |||
| .append("url", getUrl()) | |||
| .append("createTime", getCreateTime()) | |||
| .append("createBy", getCreateBy()) | |||
| .append("updateTime", getUpdateTime()) | |||
| .append("updateBy", getUpdateBy()) | |||
| .append("delFlag", getDelFlag()) | |||
| .toString(); | |||
| } | |||
| } | |||
| @ -0,0 +1,68 @@ | |||
| package com.ruoyi.model.mapper; | |||
| import java.util.List; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| /** | |||
| * 轮播图Mapper接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2025-03-04 | |||
| */ | |||
| public interface AppBannerMapper | |||
| { | |||
| /** | |||
| * 查询轮播图 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 轮播图 | |||
| */ | |||
| public AppBanner selectAppBannerById(Long id); | |||
| /** | |||
| * 查询轮播图列表 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 轮播图集合 | |||
| */ | |||
| public List<AppBanner> selectAppBannerList(AppBanner appBanner); | |||
| /** | |||
| * 新增轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| public int insertAppBanner(AppBanner appBanner); | |||
| /** | |||
| * 修改轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| public int updateAppBanner(AppBanner appBanner); | |||
| /** | |||
| * 删除轮播图 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteAppBannerById(Long id); | |||
| /** | |||
| * 批量删除轮播图 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteAppBannerByIds(Long[] ids); | |||
| /** | |||
| * 查询轮播图列表 | |||
| * | |||
| * @return 轮播图集合 | |||
| */ | |||
| public List<AppBanner> getBannerList(); | |||
| } | |||
| @ -0,0 +1,64 @@ | |||
| package com.ruoyi.model.service; | |||
| import java.util.List; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| /** | |||
| * 轮播图Service接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2025-03-04 | |||
| */ | |||
| public interface IAppBannerService | |||
| { | |||
| /** | |||
| * 查询轮播图 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 轮播图 | |||
| */ | |||
| public AppBanner selectAppBannerById(Long id); | |||
| /** | |||
| * 查询轮播图列表 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 轮播图集合 | |||
| */ | |||
| public List<AppBanner> selectAppBannerList(AppBanner appBanner); | |||
| /** | |||
| * 新增轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| public int insertAppBanner(AppBanner appBanner); | |||
| /** | |||
| * 修改轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| public int updateAppBanner(AppBanner appBanner); | |||
| /** | |||
| * 批量删除轮播图 | |||
| * | |||
| * @param ids 需要删除的轮播图主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteAppBannerByIds(Long[] ids); | |||
| /** | |||
| * 删除轮播图信息 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteAppBannerById(Long id); | |||
| public List<AppBanner> getBannerList(); | |||
| } | |||
| @ -0,0 +1,101 @@ | |||
| package com.ruoyi.model.service.impl; | |||
| import java.util.List; | |||
| import com.ruoyi.common.utils.DateUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import com.ruoyi.model.mapper.AppBannerMapper; | |||
| import com.ruoyi.model.domain.AppBanner; | |||
| import com.ruoyi.model.service.IAppBannerService; | |||
| /** | |||
| * 轮播图Service业务层处理 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2025-03-04 | |||
| */ | |||
| @Service | |||
| public class AppBannerServiceImpl implements IAppBannerService | |||
| { | |||
| @Autowired | |||
| private AppBannerMapper appBannerMapper; | |||
| /** | |||
| * 查询轮播图 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 轮播图 | |||
| */ | |||
| @Override | |||
| public AppBanner selectAppBannerById(Long id) | |||
| { | |||
| return appBannerMapper.selectAppBannerById(id); | |||
| } | |||
| /** | |||
| * 查询轮播图列表 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 轮播图 | |||
| */ | |||
| @Override | |||
| public List<AppBanner> selectAppBannerList(AppBanner appBanner) | |||
| { | |||
| return appBannerMapper.selectAppBannerList(appBanner); | |||
| } | |||
| /** | |||
| * 新增轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int insertAppBanner(AppBanner appBanner) | |||
| { | |||
| appBanner.setCreateTime(DateUtils.getNowDate()); | |||
| return appBannerMapper.insertAppBanner(appBanner); | |||
| } | |||
| /** | |||
| * 修改轮播图 | |||
| * | |||
| * @param appBanner 轮播图 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int updateAppBanner(AppBanner appBanner) | |||
| { | |||
| appBanner.setUpdateTime(DateUtils.getNowDate()); | |||
| return appBannerMapper.updateAppBanner(appBanner); | |||
| } | |||
| /** | |||
| * 批量删除轮播图 | |||
| * | |||
| * @param ids 需要删除的轮播图主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteAppBannerByIds(Long[] ids) | |||
| { | |||
| return appBannerMapper.deleteAppBannerByIds(ids); | |||
| } | |||
| /** | |||
| * 删除轮播图信息 | |||
| * | |||
| * @param id 轮播图主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteAppBannerById(Long id) | |||
| { | |||
| return appBannerMapper.deleteAppBannerById(id); | |||
| } | |||
| @Override | |||
| public List<AppBanner> getBannerList() { | |||
| return appBannerMapper.getBannerList(); | |||
| } | |||
| } | |||
| @ -0,0 +1,86 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.ruoyi.model.mapper.AppBannerMapper"> | |||
| <resultMap type="AppBanner" id="AppBannerResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="image" column="image" /> | |||
| <result property="url" column="url" /> | |||
| <result property="createTime" column="create_time" /> | |||
| <result property="createBy" column="create_by" /> | |||
| <result property="updateTime" column="update_time" /> | |||
| <result property="updateBy" column="update_by" /> | |||
| <result property="delFlag" column="del_flag" /> | |||
| </resultMap> | |||
| <sql id="selectAppBannerVo"> | |||
| select id, image, url, create_time, create_by, update_time, update_by, del_flag from app_banner | |||
| </sql> | |||
| <select id="selectAppBannerList" parameterType="AppBanner" resultMap="AppBannerResult"> | |||
| <include refid="selectAppBannerVo"/> | |||
| <where> | |||
| <if test="image != null and image != ''"> and image = #{image}</if> | |||
| <if test="url != null and url != ''"> and url = #{url}</if> | |||
| </where> | |||
| </select> | |||
| <select id="selectAppBannerById" parameterType="Long" resultMap="AppBannerResult"> | |||
| <include refid="selectAppBannerVo"/> | |||
| where id = #{id} | |||
| </select> | |||
| <select id="getBannerList" resultType="com.ruoyi.model.domain.AppBanner"> | |||
| <include refid="selectAppBannerVo"/> | |||
| </select> | |||
| <insert id="insertAppBanner" parameterType="AppBanner"> | |||
| insert into app_banner | |||
| <trim prefix="(" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">id,</if> | |||
| <if test="image != null">image,</if> | |||
| <if test="url != null">url,</if> | |||
| <if test="createTime != null">create_time,</if> | |||
| <if test="createBy != null">create_by,</if> | |||
| <if test="updateTime != null">update_time,</if> | |||
| <if test="updateBy != null">update_by,</if> | |||
| <if test="delFlag != null">del_flag,</if> | |||
| </trim> | |||
| <trim prefix="values (" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">#{id},</if> | |||
| <if test="image != null">#{image},</if> | |||
| <if test="url != null">#{url},</if> | |||
| <if test="createTime != null">#{createTime},</if> | |||
| <if test="createBy != null">#{createBy},</if> | |||
| <if test="updateTime != null">#{updateTime},</if> | |||
| <if test="updateBy != null">#{updateBy},</if> | |||
| <if test="delFlag != null">#{delFlag},</if> | |||
| </trim> | |||
| </insert> | |||
| <update id="updateAppBanner" parameterType="AppBanner"> | |||
| update app_banner | |||
| <trim prefix="SET" suffixOverrides=","> | |||
| <if test="image != null">image = #{image},</if> | |||
| <if test="url != null">url = #{url},</if> | |||
| <if test="createTime != null">create_time = #{createTime},</if> | |||
| <if test="createBy != null">create_by = #{createBy},</if> | |||
| <if test="updateTime != null">update_time = #{updateTime},</if> | |||
| <if test="updateBy != null">update_by = #{updateBy},</if> | |||
| <if test="delFlag != null">del_flag = #{delFlag},</if> | |||
| </trim> | |||
| where id = #{id} | |||
| </update> | |||
| <delete id="deleteAppBannerById" parameterType="Long"> | |||
| delete from app_banner where id = #{id} | |||
| </delete> | |||
| <delete id="deleteAppBannerByIds" parameterType="String"> | |||
| delete from app_banner where id in | |||
| <foreach item="id" collection="array" open="(" separator="," close=")"> | |||
| #{id} | |||
| </foreach> | |||
| </delete> | |||
| </mapper> | |||
| @ -0,0 +1,19 @@ | |||
| package com.ruoyi.common.annotation; | |||
| import java.lang.annotation.Documented; | |||
| import java.lang.annotation.ElementType; | |||
| import java.lang.annotation.Retention; | |||
| import java.lang.annotation.RetentionPolicy; | |||
| import java.lang.annotation.Target; | |||
| /** | |||
| * 匿名访问不鉴权注解 | |||
| * | |||
| * @author ruoyi | |||
| */ | |||
| @Target({ ElementType.METHOD, ElementType.TYPE }) | |||
| @Retention(RetentionPolicy.RUNTIME) | |||
| @Documented | |||
| public @interface Anonymous { | |||
| } | |||
| @ -0,0 +1,88 @@ | |||
| package com.ruoyi.framework.config.properties; | |||
| import java.util.*; | |||
| import java.util.regex.Pattern; | |||
| import org.apache.commons.lang3.RegExUtils; | |||
| import org.springframework.beans.BeansException; | |||
| import org.springframework.beans.factory.InitializingBean; | |||
| import org.springframework.context.ApplicationContext; | |||
| import org.springframework.context.ApplicationContextAware; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.core.annotation.AnnotationUtils; | |||
| import org.springframework.web.method.HandlerMethod; | |||
| import org.springframework.web.servlet.mvc.method.RequestMappingInfo; | |||
| import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; | |||
| import com.ruoyi.common.annotation.Anonymous; | |||
| /** | |||
| * 设置Anonymous注解 允许 匿名访问不鉴权 | |||
| * 项目初始化时候,会将Anonymous注解的 路径 提取出来,放到urls里面 | |||
| * | |||
| * InitializingBean:为bean提供了初始化方法的方式,凡是继承该接口的类,在初始化bean的时候都会执行afterPropertiesSet方法 | |||
| * | |||
| * ApplicationContextAware:当一个类实现了这个接口之后,这个类就可以方便的获得ApplicationContext对象(spring上下文) | |||
| * ,Spring发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContext(参数)方法 | |||
| * ,调用该方法时,会将容器本身ApplicationContext对象作为参数传递给该方法。 | |||
| * | |||
| * @author ruoyi | |||
| */ | |||
| @Configuration | |||
| public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware { | |||
| private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); | |||
| // spring上下文 | |||
| private ApplicationContext applicationContext; | |||
| // 前端请求接口的时候,如果在这个url里面,直接放行 | |||
| private List<String> urls = new ArrayList<>(); | |||
| // 替代字符串 | |||
| public String ASTERISK = "*"; | |||
| @Override | |||
| public void afterPropertiesSet() { | |||
| // 将整个项目所有bean都拿出来 | |||
| RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); | |||
| // 获取 每个url 与 方法、类的对应关系 | |||
| Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods(); | |||
| // info 是代表每个url对象 | |||
| map.keySet().forEach(info -> { | |||
| // 获取类和方法的信息 | |||
| HandlerMethod handlerMethod = map.get(info); | |||
| // 获取方法上边的注解,如果此方法被“Anonymous”注解,则返回该方法,否则返回null | |||
| Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class); | |||
| // method为null啥也不干,否则替代path variable 为 * | |||
| Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) | |||
| .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); | |||
| // 获取类上边的注解,如果此类被“Anonymous”注解,则返回该类,否则返回null | |||
| Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class); | |||
| // controller为null啥也不干,否则替代path variable 为 * | |||
| Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) | |||
| .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); | |||
| }); | |||
| } | |||
| /** | |||
| * @Description // 这玩意是接口ApplicationContextAware带来的,就是为了在本类中方便获取 applicationContext | |||
| * @Date 16:15 2023/3/22 | |||
| **/ | |||
| @Override | |||
| public void setApplicationContext(ApplicationContext context) throws BeansException { | |||
| this.applicationContext = context; | |||
| } | |||
| public List<String> getUrls() { | |||
| return urls; | |||
| } | |||
| public void setUrls(List<String> urls) { | |||
| this.urls = urls; | |||
| } | |||
| } | |||