中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

西寧平臺網(wǎng)站建設(shè)展示型網(wǎng)站設(shè)計公司

西寧平臺網(wǎng)站建設(shè),展示型網(wǎng)站設(shè)計公司,邱縣做網(wǎng)站,wordpress the time文章目錄需求內(nèi)容:實(shí)現(xiàn):步驟一:導(dǎo)入SpringAOP相關(guān)依賴pom.xml步驟二:自定義兩個注解步驟三:需要用到的實(shí)體類**步驟四:切面具體實(shí)現(xiàn)**用法1.需要過濾返回值的方法添加注解FilterByUser2.數(shù)據(jù)Dto在需要過濾的字段添加Fi…

文章目錄

        • 需求內(nèi)容:
      • 實(shí)現(xiàn):
          • 步驟一:導(dǎo)入SpringAOP相關(guān)依賴pom.xml
          • 步驟二:自定義兩個注解
          • 步驟三:需要用到的實(shí)體類
          • **步驟四:切面具體實(shí)現(xiàn)**
      • 用法
          • 1.需要過濾返回值的方法添加注解@FilterByUser
          • 2.數(shù)據(jù)Dto在需要過濾的字段添加@Filter注解,值為數(shù)據(jù)庫中json字段的key
          • 3.數(shù)據(jù)庫中添加一條記錄
          • 4.完成配置的效果
      • **實(shí)現(xiàn)原理描述**

需求內(nèi)容:

在系統(tǒng)已經(jīng)完成的情況下,添加以下權(quán)限:

·城市為“上?!焙汀吧钲凇钡摹安块T一”用戶,只能看到用戶表數(shù)據(jù)中城市為“上?;蛏钲凇鼻也块T為“部門一的子部門”。

所用技術(shù)包含,自定義注解,SpringAOP切面,反射以及其他SpringBoot項(xiàng)目常用

實(shí)現(xiàn):

步驟一:導(dǎo)入SpringAOP相關(guān)依賴pom.xml
		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.6</version></dependency>
步驟二:自定義兩個注解
package cn.fy.anno;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @author Fy* 自定義注解,在實(shí)體類中有該注解的字段即可以被過濾* @Date 2022年12月14日 11:12:59*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Filter {//{"bumen":["部門11","部門12","部門13","部門14"]} 則keyName為 bumen//此處用“bumen”只是為了證明可以和實(shí)體類的dept不同String value() default "";}
package cn.fy.anno;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FilterByUser {}
步驟三:需要用到的實(shí)體類

1.要查詢要過濾的數(shù)據(jù)實(shí)體類,需繼承2實(shí)體類,或(包含2實(shí)體類中需要查詢的字段,并修改對應(yīng)切面中獲取前端傳遞用戶賬號的方法)

package cn.fy.dto;import cn.fy.anno.Filter;
import lombok.Data;
import java.io.Serializable;
@Data
public class User extends QueryDto implements Serializable {private String userName;@Filter("bumen")//寫成拼音只是為了證明可以與實(shí)體類字段名不一致private String dept;@Filter("chengshi")private String city;
}

2.接收前端傳遞參數(shù)的查詢實(shí)體類

package cn.fy.dto;
import lombok.Data;
@Data
public class QueryDto {int pageIndex;int pageSize;String role;//登錄的用戶賬號String userName;
}

3.權(quán)限數(shù)據(jù)庫表對應(yīng)的實(shí)體類和對應(yīng)Mapper

package cn.fy.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/*** @author Fy* @since 2023-02-10*/
@Data
@TableName("user_power")
public class UserPower implements Serializable {private static final long serialVersionUID = 1L;@TableId("id")private Integer id;@TableField("user_name")private String userName;@TableField("create_time")private String createTime;@TableField("json")private String json;
}package cn.fy.sql;import cn.fy.dto.UserPower;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;/*** @author Fy* @since 2023-02-10*/
@Mapper
public interface UserPowerMapper extends BaseMapper<UserPower> {}
步驟四:切面具體實(shí)現(xiàn)
package cn.fy.aspect;import cn.fy.anno.Filter;
import cn.fy.dto.UserPower;
import cn.fy.dto.QueryDto;
import cn.fy.sql.UserPowerMapper;
import cn.fy.sql.UserPowerMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;@Component
@Aspect
@Slf4j
public class PowerAspect {@Resourceprivate UserPowerMapper userPowerMapper;//需要限定包的話則自行添加@exectution@Pointcut("@annotation(cn.fy.anno.FilterByUser)")public void pointCut() {}@Around("pointCut()")public Object around(ProceedingJoinPoint joinPoint) {Object reDto = null;Object[] args = joinPoint.getArgs();try {//執(zhí)行方法并獲得返回值reDto = joinPoint.proceed(args);} catch (Throwable throwable) {log.error("", throwable);throw new RuntimeException(throwable);}QueryDto queryDto = null;for (Object arg : args) {if (arg instanceof QueryDto) {queryDto = (QueryDto) arg;break;}}if (queryDto == null) {return reDto;}//此部分為MybatisPlus查詢數(shù)據(jù)庫方法,可自行替換LambdaQueryWrapper<UserPower> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(UserPower::getUserName, queryDto.getUserName());UserPower powerDto = userPowerMapper.selectOne(queryWrapper);log.info(JSON.toJSONString(powerDto));log.info("---查詢時間戳---" + System.currentTimeMillis());JSONObject jsonObject = null;if (powerDto == null) {return reDto;}try {jsonObject = JSON.parseObject(powerDto.getJson());} catch (Exception e) {log.error("", e);}if (jsonObject == null) {return reDto;}try {if (reDto instanceof List) {//是集合List list = (List) reDto;List successList = new ArrayList();//循環(huán)整個集合for (Object o : list) {Field[] fields = o.getClass().getDeclaredFields();List<Boolean> booleanList = new ArrayList<>();for (Field field : fields) {field.setAccessible(true);Filter annotation = field.getAnnotation(Filter.class);if (annotation != null) {String keyName = annotation.value();Object o1 = jsonObject.get(keyName);//如果獲取到了key的話if (!ObjectUtils.isEmpty(o1)) {List list1 = (List) o1;//如果當(dāng)前記錄在記錄中的話booleanList.add(list1.contains(field.get(o)));if (list1.contains(field.get(o))) {log.info("key為" + keyName + ":的值【" + field.get(o) + "】在配置的權(quán)限中");}}}}if (!booleanList.contains(false)) {//證明這個數(shù)據(jù)是對的successList.add(o);}}return successList;} else {return reDto;}} catch (Exception e) {log.error("", e);}return reDto;}}

用法

1.需要過濾返回值的方法添加注解@FilterByUser

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-2o1ptGjs-1676532488414)(C:\Users\song.cai\AppData\Roaming\Typora\typora-user-images\1676531140607.png)]

2.數(shù)據(jù)Dto在需要過濾的字段添加@Filter注解,值為數(shù)據(jù)庫中json字段的key

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-EKD75W9x-1676532488415)(C:\Users\song.cai\AppData\Roaming\Typora\typora-user-images\1676531216000.png)]

3.數(shù)據(jù)庫中添加一條記錄

在這里插入圖片描述

4.完成配置的效果

原輸出結(jié)果

[User(userName=user163122156, dept=部門11, city=北京), 
User(userName=user163122156, dept=部門11, city=上海), 
User(userName=user163122156, dept=部門2, city=上海), 
User(userName=user163122156, dept=部門11, city=深圳)]

加過濾之后輸出結(jié)果

[User(userName=user163122156, dept=部門11, city=上海)]

實(shí)現(xiàn)原理描述

利用@Aspect注解來對切面進(jìn)行編寫,通過注解形式的切入點(diǎn)表達(dá)式,對加了@FilterByUser注解的方法進(jìn)行過濾。利用@Around注解過濾修改原方法的返回值,在切面中通過反射獲取原方法返回實(shí)體類中加了@Filter注解的字段,通過去查詢數(shù)據(jù)庫對該實(shí)體類中該字段的值進(jìn)行比較過濾,多個@Filter需要全部校驗(yàn)通過才放行該對象,否則直接過濾掉不展示。

http://www.risenshineclean.com/news/49736.html

相關(guān)文章:

  • 警告 此服務(wù)器美國維護(hù)搜外seo視頻 網(wǎng)絡(luò)營銷免費(fèi)視頻課程
  • 做網(wǎng)站前期費(fèi)用個人優(yōu)秀網(wǎng)頁設(shè)計
  • 公眾號怎么做微網(wǎng)站百度站長工具驗(yàn)證
  • 網(wǎng)站注冊手機(jī)號安全嗎深圳網(wǎng)絡(luò)營銷
  • 蘇州網(wǎng)站建設(shè)公司電話百度百科詞條創(chuàng)建入口
  • 六安網(wǎng)站推廣獲客appseo搜狗
  • 深圳手機(jī)網(wǎng)站開發(fā)溫嶺網(wǎng)絡(luò)推廣
  • 黨建設(shè)網(wǎng)站營銷咨詢公司排名前十
  • 裝飾公司 網(wǎng)站模板網(wǎng)絡(luò)推廣中心
  • 南京平臺網(wǎng)站建設(shè)網(wǎng)站如何優(yōu)化一個關(guān)鍵詞
  • 怎么做網(wǎng)站營銷策劃個人網(wǎng)站設(shè)計畢業(yè)論文
  • 福田公司簡介網(wǎng)站seo排名培訓(xùn)
  • 設(shè)計電子商務(wù)網(wǎng)站建設(shè)方案互聯(lián)網(wǎng)推廣方式有哪些
  • 潛江公司做網(wǎng)站徐州網(wǎng)站優(yōu)化
  • 煙臺 網(wǎng)站建設(shè)多少錢永久免費(fèi)客服系統(tǒng)有哪些軟件
  • 互動吧網(wǎng)站模板青島網(wǎng)絡(luò)推廣
  • 網(wǎng)站建設(shè)公司如何約客戶瀏覽器下載
  • 網(wǎng)站流程圖軟件大型網(wǎng)站seo課程
  • 南縣做網(wǎng)站設(shè)計網(wǎng)站大全
  • 做響應(yīng)式網(wǎng)站兼容哪幾個尺寸百度云服務(wù)器官網(wǎng)
  • 大型網(wǎng)站架設(shè)需要考慮哪些問題關(guān)鍵字參數(shù)
  • 網(wǎng)站建設(shè)的好處和目的網(wǎng)站關(guān)鍵詞快速排名技術(shù)
  • 美萍企業(yè)管理軟件海外aso優(yōu)化
  • WordPress里h1跟p有什么重慶seo海洋qq
  • 大連市公眾平臺網(wǎng)站搜索網(wǎng)頁內(nèi)容
  • 做ppt音樂怎么下載網(wǎng)站網(wǎng)絡(luò)小說排行榜
  • 用rp怎么做網(wǎng)站導(dǎo)航菜單收錄提交入口網(wǎng)址
  • 起重機(jī)網(wǎng)站怎么做荊門今日頭條新聞發(fā)布
  • 卡通設(shè)計類網(wǎng)站欣賞網(wǎng)絡(luò)營銷軟件大全
  • 臺州網(wǎng)站建設(shè)公司營銷型網(wǎng)站建設(shè)