springboot知识04

1、集成swagger+shiro放行

(1)导包

(2)SwaggerConfig(公共)

package com.smart.community.common.swagger.config;import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import javax.annotation.Resource;/*** @author liuhuitang*/
@Configuration
@EnableOpenApi
public class SwaggerConfig {@Resourceprivate SwaggerProperties swaggerProperties;@Beanpublic Docket docket(ApiInfo apiInfo){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo).enable(swaggerProperties.getEnable()).groupName(swaggerProperties.getGroupName()).select().apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage())).paths(PathSelectors.any()).build();}@Beanpublic ApiInfo apiInfo(){return new ApiInfoBuilder().title(swaggerProperties.getTitle()).description(swaggerProperties.getDescription()).version(swaggerProperties.getVersion()).contact(new Contact(swaggerProperties.getName(), swaggerProperties.getUrl(), swaggerProperties.getEmail())).build();}
}

(3)SwaggerProperties(公共)

package com.smart.community.common.swagger.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author liuhuitang*/
@Component
@ConfigurationProperties("swagger")
@Data
public class SwaggerProperties {private String title;private String basePackage;private String groupName = "default-group";private String description;private String name;private String url;private String email;private Boolean enable = true;private String version;}

(4)yml文件(公共)


spring:#  swagger使用mvc:
#    配置Spring MVC如何匹配URL路径path-match:
#      基于Ant风格的路径模式匹配matching-strategy: ant_path_matcher

(5)yml文件(具体)

swagger:base-package: "com.smart.community.services.controller"title: "智慧社区在线Api文档"group-name: "物业服务模块"description: "出现bug,请熟读该文档"name: "智慧社区"url: "https://www.baidu.com"email: "11111@163.com"version: "V1.0.0"

(6)设置放行(具体yml里面)

shiro:loginUrl: "/test/no/login"white:list: "/auth/**,/doc.html,/swagger**/**,/webjars/**,/v3/**,/druid/**"

(7)ShiroConfig 重新配置

        1)单值方式

package com.smart.community.services.config;import com.smart.community.services.realm.UserRealm;
import com.smart.community.services.session.CustomSessionManager;
import com.smart.community.services.utils.ShiroUtils;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.List;/*** @author liuhuitang*/
@Configuration
public class ShiroConfig {public static final String SHIRO_ANON="anon";public static final String SHIRO_AUTHC = "authc";@Value("${shiro.white.list}")private List<String> whiteList;/*** 注册realm* @return*/@Beanpublic UserRealm realm(HashedCredentialsMatcher hashedCredentialsMatcher){UserRealm userRealm = new UserRealm();userRealm.setCredentialsMatcher(hashedCredentialsMatcher);return userRealm;}/*** 注册realmmanager* @param realm* @return*/@Beanpublic DefaultWebSecurityManager securityManager(UserRealm realm,CustomSessionManager customSessionManager){DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();//注册自定义RealmdefaultWebSecurityManager.setRealm(realm);//注册sessiondefaultWebSecurityManager.setSessionManager(customSessionManager);return defaultWebSecurityManager;}/*** 注册过滤器* @return*/@Beanpublic ShiroFilterChainDefinition shiroFilterChainDefinition(){DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();//白名单(支持通配符)//放行whiteList.forEach(path->definition.addPathDefinition(path,SHIRO_ANON));//表示其他所有接口需要认证definition.addPathDefinition("/**",SHIRO_AUTHC);return definition;}/*** 注册密码加密器* @return*/@Beanpublic HashedCredentialsMatcher hashedCredentialsMatcher(){HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();hashedCredentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);hashedCredentialsMatcher.setHashIterations(ShiroUtils.HASH_ITERATIONS);
//        hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);return hashedCredentialsMatcher;}/*** cookie+session* jwt*/@Beanpublic CustomSessionManager sessionManager(){CustomSessionManager customSessionManager = new CustomSessionManager();//        session的过期时间 -1永不过期 0用一次 >0根据时间(单位毫秒)//todo 作用?customSessionManager.setGlobalSessionTimeout(7*24*60*60*1000);customSessionManager.setSessionIdCookieEnabled(true);customSessionManager.setSessionIdUrlRewritingEnabled(false);return customSessionManager;}}

        2)多值方式(多) 

                1)配置信息(上面的单也可以)
shiro:loginUrl: "/test/no/login"white:list:- "/auth/**"- "/doc.html"- "/swagger**/**"- "/webjars/**"- "/v3/**"- "/druid/**"
                2)新建ShiroProperties属性类
package com.smart.community.services.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;import java.util.List;@ConfigurationProperties("shiro.white")
@Data
public class ShiroProperties {private List<String> list;}
                3)ShiroProperties
package com.smart.community.services.config;import com.smart.community.services.realm.UserRealm;
import com.smart.community.services.session.CustomSessionManager;
import com.smart.community.services.utils.ShiroUtils;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;
import java.util.List;/*** @author liuhuitang*/
@Configuration
@EnableConfigurationProperties(ShiroProperties.class)
public class ShiroConfig {public static final String SHIRO_ANON="anon";public static final String SHIRO_AUTHC = "authc";@Value("${shiro.white.list}")
//    private List<String> whiteList;@Resourceprivate ShiroProperties shiroProperties;/*** 注册realm* @return*/@Beanpublic UserRealm realm(HashedCredentialsMatcher hashedCredentialsMatcher){UserRealm userRealm = new UserRealm();userRealm.setCredentialsMatcher(hashedCredentialsMatcher);return userRealm;}/*** 注册realmmanager* @param realm* @return*/@Beanpublic DefaultWebSecurityManager securityManager(UserRealm realm,CustomSessionManager customSessionManager){DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();//注册自定义RealmdefaultWebSecurityManager.setRealm(realm);//注册sessiondefaultWebSecurityManager.setSessionManager(customSessionManager);return defaultWebSecurityManager;}/*** 注册过滤器* @return*/@Beanpublic ShiroFilterChainDefinition shiroFilterChainDefinition(){DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();//白名单(支持通配符)//放行
//        whiteList.forEach(path->definition.addPathDefinition(path,SHIRO_ANON));shiroProperties.getList().forEach(path->definition.addPathDefinition(path,SHIRO_ANON));//表示其他所有接口需要认证definition.addPathDefinition("/**",SHIRO_AUTHC);return definition;}/*** 注册密码加密器* @return*/@Beanpublic HashedCredentialsMatcher hashedCredentialsMatcher(){HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();hashedCredentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);hashedCredentialsMatcher.setHashIterations(ShiroUtils.HASH_ITERATIONS);
//        hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);return hashedCredentialsMatcher;}/*** cookie+session* jwt*/@Beanpublic CustomSessionManager sessionManager(){CustomSessionManager customSessionManager = new CustomSessionManager();//        session的过期时间 -1永不过期 0用一次 >0根据时间(单位毫秒)//todo 作用?customSessionManager.setGlobalSessionTimeout(7*24*60*60*1000);customSessionManager.setSessionIdCookieEnabled(true);customSessionManager.setSessionIdUrlRewritingEnabled(false);return customSessionManager;}}

2、mybatisPlus的配置分页转换

package com.smart.community.common.db.utils;import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.BeanUtils;
import org.springframework.util.ObjectUtils;import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;/*** @author liuhuitang*/
public class CommonBeanUtils extends BeanUtils {/*** 将A对象的属性赋值给B对象* @param source* @param targetSupplier* @return* @param <S>* @param <T>*/public static <S,T> T convertTo(S source, Supplier<T> targetSupplier){//        这里的ObjectUtils.isEmpty(targetSupplier)是为了方式下面的get出现空指针异常if (ObjectUtils.isEmpty(source) || ObjectUtils.isEmpty(targetSupplier)){return null;}T t = targetSupplier.get();copyProperties(source,t);return t;}/*** 调用convertTo(s, targetSupplier)方法来生成一个新的T类型对象。* 然后使用collect(Collectors.toList())将所有这些新生成的T类型对象收集到一个新的列表中* @param sources* @param targetSupplier* @return* @param <S>* @param <T>*/public static <S,T> List<T> convertListTo(List<S> sources, Supplier<T> targetSupplier){if (ObjectUtils.isEmpty(sources) || ObjectUtils.isEmpty(targetSupplier)){return null;}//把每个对象赋值属性然后用collect转为集合return sources.stream().map(s -> convertTo(s,targetSupplier)).collect(Collectors.toList());}/*** mybatisplus 配置分页转换* @param source* @param target* @param targetSupplier* @return* @param <S>* @param <T>*/public static <S,T> IPage<T> convertPageInfo(IPage<S> source, IPage<T> target, Supplier<T> targetSupplier){//属性复制copyProperties(source,target);target.setRecords(convertListTo(source.getRecords(),targetSupplier));return target;}}

3、stream流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418433.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习笔记(七)——操作数组工具类Arrays

文章目录 ArraysArrays.toString()Arrays.binarySearch()Arrays.copyOf()Arrays.copyOfRange()Arrays.fill()Arrays.sort()升序排序降序排序 Arrays 操作数组的工具类。 Arrays.toString() import java.util.Arrays;public class test40 {public static void main(String[] a…

python之粘包/粘包的解决方案

python之粘包/粘包的解决方案 什么是粘包 粘包就是在数据传输过程中有多个数据包被粘连在一起被发送或接受 服务端&#xff1a; import socket import struct# 创建Socket Socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定服务器和端口号 servers_addr (…

Ubuntu系统pycharm以及annaconda的安装配置笔记以及问题集锦(更新中)

Ubuntu 22.04系统pycharm以及annaconda的安装配置笔记以及问题集锦 pycharm安装 安装完之后桌面上并没有生成图标 后面每次启动pycharm都要到它的安装路径下的bin文件夹下&#xff0c; cd Downloads/pycharm-2018.1.4/bin然后使用sh命令启动脚本程序来打开pycharm sh pycha…

【Linux的权限命令详解】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 shell命令以及运行原理 Linux权限的概念 Linux权限管理 一、什么是权限&#xff1f; 二、权限的本质 三、Linux中的用户 四、linux中文件的权限 4.1、文件访问…

Mybatis Plus baomidou EasyCode插件自动生成驼峰字段实体类,而不是全小写字段实体类

开发环境&#xff1a; springboot 2.4.3baomidou 3.4.0mybatis plus 3.4.0jdk8 问题描述&#xff1a; 1、mybatis 使用baomidou 插件&#xff0c;EasyCode自动生成实体类&#xff0c;但字段都是全部小写的&#xff0c;不太符合编码规范。 2、mysql表字段全是驼峰&#xff0c…

正则表达式第三四个作用:替换、切割

目录 方法二 replaceAll&#xff1a; 方法三&#xff1a;spilt&#xff1a; 方法一之前已经见过了&#xff1a; 方法二 replaceAll&#xff1a; 形参中&#xff1a; 参数regex表示一个正则表达式。可以将当前字符串中匹配regex正则表达式的字符串替换为newStr。 代码演示 S…

Windows给docker设置阿里源

windows环境搭建专栏&#x1f517;点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆&#xff0c;所以外网的访问总是那么慢又困难&#xff0c;用docker拉取几兆的小镜象还能忍受&#xff…

一步一步写线程之五线程池的模型之一领导者追随者模型

一、线程池的模型 在学习过相关的多线程知识后&#xff0c;从更抽象的角度来看待多线程解决问题的方向&#xff0c;其实仍然是典型的生产和消费者的模型。无论是数据计算、存储、分发和任务处理等都是通过多线程这种手段来解决生产者和消费者不匹配的情况。所以&#xff0c;得…

github经常登不上去怎么办?

问题 想少些代码&#xff0c;多学习&#xff0c;少不了使用github&#xff0c;但是在国内经常上不去&#xff0c;很耽误事&#xff0c;这里提供一个简单方法&#xff0c;供参考。 github GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;可以让开发者共同协作开发软…

softmax回实战

1.数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一&#xff0c;但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (Xiao et al., 2017)。 import torch import torchvision from torch.utils import data from torchvisi…

Web自动化测试 —— cookie复用

一、cookie简介 cookie是一些数据&#xff0c;存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时&#xff0c;在链接关闭后&#xff0c;服务端不会记录用户信息 二、为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入若用例需要经常执行&…

浅析性能测试策略及适用场景

前言 面对日益复杂的业务场景和不同的系统架构&#xff0c;前期的需求分析和准备工作&#xff0c;需要耗费很多的时间。而不同的测试策略&#xff0c;也对我们的测试结果是否符合预期目标至关重要。 这篇博客&#xff0c;聊聊我个人对常见的性能测试策略的理解&#xff0c;以…