跳至主要内容

博文

目前显示的是 2020的博文

Spring Security整合进Spring Boot中的基础用法

Welcome file 简介 Spring Security为应用程序提供了方便的登陆和鉴权的 API ,默认启用各项安全配置,能够简化大量的应用程序安全需求开发。不过由于这些默认启用的各项安全配置,也会让第一次集成Spring Security的开发人员有一定的上手难度。 使用环境:Java 11 和 Spring Boot 2.3.5.RELEASE 集成Spring Security 在Spring Boot中集成Spring Security与集成其他的框架类似,在 pom.xml 里引入相关的starter就可以: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 由于大部分的使用场景还是web,所以这里也引进Spring MVC做示例。 现在建立一个 Controller 作为简单的示例: @RestController ( "foods" ) public class FoodController { private List < String > foods = List . of ( "Bread" , "Sandwich" ) ; @GetMapping public List < String > getFood ( ) { return foods

使用JMH对Java应用进行微基准测试

Welcome file 简介 JMH(Java Microbenchmark Harness)是一个帮助开发者更好的实现微基准测试(microbenchmark)的工具,属于OpenJDK项目的一部分。虽然名字叫微基准测试工具,但JMH也可以适用于其他类型的基准测试,对较大型项目的基准测试同样也有帮助。 为什么需要用JMH来做基准测试 由于JVM会对代码做各种优化,而自己写的基准测试很难考虑到各方面的优化,这样会导致测试的结果可能跟线上的相差较大。JMH本身虽然不能完全消除这些优化的影响,但是它能帮助减轻这方面的影响。 本文使用环境:Java 8 使用Maven构建运行JMH 使用Maven构建运行JMH是被OpenJDK团队推荐的使用方式,因为该方式能产生更加可靠的结果。 使用Maven创建新项目 使用该命令可以创建一个基于Maven的JMH模板项目: mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=org.openjdk.jmh -DarchetypeArtifactId=jmh-java-benchmark-archetype -DarchetypeVersion=1.25.2 -DgroupId=com.nereusyi.demos -DartifactId=jmh-template -Dversion=1.0 官方示例的命令行参数中,没有-DarchetypeVersion=1.25.2这行,那样默认会生成较老版本的模板项目,需要较多改动才能适配新版本的Java,所以最好加上该参数。也可以在maven仓库上查看JMH的最新版本并替换 部分输出如下: [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: jmh-java-benchmark-archetype:1.25.2 [INFO] ------------------

Java NIO File API使用总结

Welcome file 简介 Java I/O File API是JDK的核心API之一,在构建系统时,十分常用。我在工作实践中,见到大多数人最常使用的是 java.io.File 的API,对Java7之后出现的NIO的API不太熟悉。 总的来说,File能实现的功能NIO都能实现,并且NIO API更好用、更方便,同时内置了不少工具类,也解决了File API的一些缺陷。 根据实际工作中的使用和一些文档,本文总结了一些常见的Java File NIO的用法。 File的缺陷 File API比较简单好用,能完成大部分功能,但使用上有不少的问题,比如: 大多数方法出错不抛出异常 比如:删除 new File("1111.txt").delete() ,如果删除失败, delete 方法只会返回一个 false ,开发者没办法知道具体原因,比如是因为没权限,还是因为文件已被删除? 不支持软链接,这会导致有某些情况下没办法遍历目录 文件的元数据支持较少,比如缺少文件的权限、安全属性等 等等。 File和Path java.nio.file.Path 是Java7中用于替代File的新API,File和Path的概念相似,都是表示一个文件或文件夹的抽象。实际上,也可以把Path当成新API中的File。 FIle与Path的主要区别: File是实体类,Path是接口,使得Path更符合面向对象的设计原则。 File独立于文件系统,Path与文件系统相关,以及Path能给出更多关于文件的信息。 新写的代码最好就开始使用Path,有需要与File交互的地方,可以使用FIle与Path相互转换方法: Path path = new File ( DEMO_PATH ) . toPath ( ) ; File file = path . toFile ( ) ; Path的基本操作 创建Path URI uri = new URI ( "file:///" + DEMO_PATH ) ; // method 1 Path path1 = Paths . get ( DEMO_PATH ) ; // method 2