阿尔法色色之屋 - 明空Minempty
type: channel
link: https://www.alphah.top/index.php/author/1/
description: 明空Minempty
items: 2024.07.04 语「音乐之路」
items: 【Spring】Spring Security 入门原理及实战
items: 【Json】Jackson 常用注解 详解
items: 【Intellij IDEA】全局搜索快捷键 整理
items: 【Typecho】为Typecho添加文章目录树
items: 【Lombok】注解 传送门
items: 【Lombok】基础注解 之 @RequiredArgsConstructor
items: CentOS 7 各类安装教程 传送门
items: 2023.01.30 语「无问西东」
items: 2022.12.04 心「传承」

2024.07.04 语「音乐之路」
type: item
date: 2024-07-04T02:30:00+08:00
description: 一部伟大的作品，这首承载了10年回忆的歌曲，在现今的技术革新后重新焕发了生机。重音Teto曾是愚人节玩笑的产物，但过程中每个人都带着不羁的畅想进行创作，反而体现出了那时候人们最纯粹的想象力与创造力。这也是生活在新时代的我们所逐渐丢失的东西。在AI迅猛发展的如今，人们面临着新的机遇与挑战。对过去美好回忆的执念、对当下浮躁风气的焦虑，把我们困在了一个又一个选择的交叉路口中。也许，我们不必彷徨。音乐是心灵的明灯，无关形式，无关风格，无关载体。至少于我而言，每当重音的复苏之声响起，我将不再徘徊，我将继续倾听，用这连通了过去与现在的歌声，向着未来骄傲地前行！[timeline-item] [btn href="http://www.bilibili.com/video/BV1Fh4y1J721" type="default"]bilibili原视频地址[/btn] [/timeline-item][dplayer src="https://oss.alphah.top/Dream/2024.07.04.mp4"/]

【Spring】Spring Security 入门原理及实战
type: item
date: 2023-03-09T10:40:00+08:00
description: 1. 基础概述Spring Security 是 Spring 项目之中的一个安全模块，可以非常方便与spring项目无缝集成。在 Spring Boot 项目中 Spring Security 的集成也十分方便。本文主要介绍 Spring Security，以及其在 Web 应用中的使用。2. 快速入门2.1 创建项目现在我们创建一个基本的 SpringBoot 的 Web 应用项目，首先引入依赖：<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>然后创建启动类 SpringSecurityApplication：@SpringBootApplication public class SpringSecurityApplication { public static void main(String[] args) { SpringApplication.run(SpringSecurityApplication.class, args); } }然后在项目目录中新建包Controller用于表示控制层，在里面新建类AppController并编写代码:@RestController public class AppController { @RequestMapping("/hello") String home() { return "Hello,Spring Security!"; } }这时候我们启动项目，并访问http://localohost:8080/hello在页面中看到：Hello,Spring Security!2.2 加入依赖这个时候我们给 SpringBoot 项目添加 SpringScurity 依赖，在pom.xml的<dependencies>标签中添加如下依赖：<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency>此时我们再一次访问http://localhost:8080/hello就会跳转到 Spring Security 的登录界面：说明 Spring Security 已经起作用了，但我们需要登陆才能继续访问。我们可以查看下这个页面的源代码，是这样： Please sign in Username Password Sign in 上面的div容器中包含了一个form，表单提交了三个数据：username【用户名】、 password【密码】、_csrf【CSRF安全防护相关】。Spring Security 默认的用户名是user，而默认密码则会在添加了 Spring Security 依赖后的项目启动时会随机生成。我们可以去控制台看下日志，会看到如下信息：在输入用户名和密码后成功登录，并能访问http://localhost:8080/hello的内容。2.2 自定义配置上面演示了默认情况下登录 Spring Security 的系统。如果我们想用自己的定义的账号密码，则需要改配置。我们新建包Config并在其中创建类MySecurityConfiguration，并添加如下代码：@Configuration @EnableWebSecurity public class MySecurityConfiguration extends WebSecurityConfigurerAdapter …

【Json】Jackson 常用注解 详解
type: item
date: 2023-02-09T17:46:00+08:00
description: 本文所写注解位于com.fasterxml.jackson.annotation包中相关依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency>基本使用java代码中常常用到jackson的注解，主要用到的有：@JsonProperty、@JsonIgnore、@JsonIgnoreProperties、@JsonFormat举例：实体类Student@JsonIgnoreProperties(value = { "address", "score" }) public class Student implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty(value = "name", required = true) private String trueName; @JsonIgnore private int age; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GTM+8") private Date birthday; private String address; private String score; public String getTrueName() { return trueName; } public void setTrueName(String trueName) { this.trueName = trueName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } @Override public String toString() { return "name: " + this.trueName + ", address: " + this.address + ", age：" + this.age + ", birthday：" + this.birthday + ", score：" + this.score; } }测试注解：public class TestJsonProperty { public static void main(String[] args) throws IOException { Student student = new Student(); student.setTrueName("张三"); student.setAge(20); student.setBirthday(new Date()); student.setAddress("上海市"); student.setScore("90"); // 使用writeValuesAsString把对象转化成json字符串。 String stuJson = new ObjectMapper().writeValueAsString(student); System.out.println(stuJson); //使用readValue把字符串转化为对象 Student stu = new ObjectMapper().readValue(stuJson, Student.class); System.out.println(stu.toString()); } }结果：{"birthday":"2020-04-16 03:57:06","name":"张三"} name: 张三, address: null, age：, …

【Intellij IDEA】全局搜索快捷键 整理
type: item
date: 2023-02-09T17:02:00+08:00
description: 1、Ctrl+N按名字搜索类相当于 Eclipse 的Ctrl+Shift+R，输入类名可以定位到这个类文件，就像 IDEA 在其它的搜索部分的表现一样，搜索类名也能对你所要搜索的内容多个部分进行匹配，而且如果能匹配的自己写的类，优先匹配自己写的类，甚至不是自己写的类也能搜索。2、Ctrl+Shift+N按文件名搜索文件同搜索类类似，只不过可以匹配所有类型的文件了。3、Ctrl+H查看类的继承关系，例如 HashMap 的父类是 AbstractMap ，子类则有一大堆。4、Ctrl+Alt+B查看子类方法实现可以查看父类或父方法定义，但是不如Ctrl+鼠标左键方便。但是在这里，Ctrl+B或Ctrl+鼠标左键只能看见 Map 接口的抽象方法put()的定义，不是我们想要的，这时候Ctrl+Alt+B就可以查看 HashMap 的put()方法。5、Alt+F7查找类或方法在哪被使用相当于 Eclipse 的Ctrl+Shif+H,但是速度快得多。6、Ctrl+F/Ctrl+Shift+F按照文本的内容查找相当于 Eclipse 的Ctrl+H，速度优势更加明显。其中Ctrl+F是在本页查找，Ctrl+Shift+F是全局查找。7、Shift+Shift搜索任何东西可搜索类、资源、配置项、方法等，还能搜索路径。其中搜索路径非常实用，例如你写了一个功能叫hello，在java，js，css，jsp中都有hello的文件夹，那我们可以搜索"hello/"找到路径中包含hello的文件夹。8、查看接口的实现类IDEA 风格Ctrl+alt+B或者Ctrl+Alt+鼠标左键

【Typecho】为Typecho添加文章目录树
type: item
date: 2023-02-07T16:00:00+08:00
description: 注意：本帖的演示主题为 Typecho Joe Theme1. 添加 文章标题 锚点打开对应的主题文件夹，找到function.php并添加如下代码:// 添加文章标题锚点 function createAnchor($obj) { global $catalog; global $catalog_count; $catalog = array(); $catalog_count = 0; $obj = preg_replace_callback('/<h([1-4])(.*?)>(.*?)<\/h\1>/i', function($obj) { global $catalog; global $catalog_count; $catalog_count ++; $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count); return '<h'.$obj[1].$obj[2].'>'.$obj[3].'</h'.$obj[1].'>'; }, $obj); return $obj; }createAnchor方法主要是通过正则表达式替换文章标题H1~H4来添加锚点，接下来我们需要调用它。随后在core/core.php中的themeInit方法最后一行之前添加如下代码：if ($archive->is('single')) { $archive->content = createAnchor($archive->content); }现在可以查看一下文章详情页面的源代码。文章的H1~H2元素应该添加了标签，该链接还有一个诸如cl-1、cl-2之类的id。2. 显示 文章目录继续在functions.php中添加如下代码:// 显示文章目录 function getCatalog() { global $catalog; $str = ''; if ($catalog) { $str = ' '."\n"; $prev_depth = ''; $to_depth = 0; foreach($catalog as $catalog_item) { $catalog_depth = $catalog_item['depth']; if ($prev_depth) { if ($catalog_depth == $prev_depth) { $str .= ' '."\n"; } elseif ($catalog_depth > $prev_depth) { $to_depth++; $str .= ' '."\n"; } else { $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth; if ($to_depth2) { for ($i=0; $i<$to_depth2; $i++) { $str .= ' '."\n".' '."\n"; $to_depth--; } } $str .= ' '; } } $str .= ' '.$catalog_item['text'].''; $prev_depth = $catalog_item['depth']; } for ($i=0; $i<=$to_depth; $i++) { $str .= ' '."\n".' '."\n"; } $str = ' '."\n".' 文章目录 '."\n".$str.' '."\n"; } echo $str; }getCatalog方法通过递归$catalog数组生成文章目录，接下来我们需要调用它。最好将放在右侧边栏中。为此在public/aside.php中根据你个人需要找到合适的位置，并添加如下代码:<?php if ($this->is('post')) getCatalog(); ?>这里的判断表示只有文章才使用目录，独立页面那些不需要。现在点击右侧的文章目录，可以通过锚点滚动到相应的文章小标题位置了。3. 添加 文章目录 样式可以看到，当前的文章目录还比较丑陋，我们来美化一下。在post.php中或者在控制台 - 外观 - 设置外观 - 公共设置 - 自定义CSS 添加如下CSS代码:.has_toc .joe_header { position: relative; } .navbar { position: -webkit-sticky; position: sticky; width: 250px; top: 125px; mar…

【Lombok】注解 传送门
type: item
date: 2023-02-07T15:44:00+08:00
description: 这是关于 Lombok 相关的注解知识整理的传送帖，方便读者定位阅读。[timeline-item][btn href="" type="default"]@Data[/btn][/timeline-item][timeline-item][btn href="" type="default"]@NonNull[/btn][/timeline-item][timeline-item][btn href="https://www.alphah.top/index.php/archives/20/" type="default"]@RequiredArgsConstructor[/btn][/timeline-item]

【Lombok】基础注解 之 @RequiredArgsConstructor
type: item
date: 2023-02-07T10:02:00+08:00
description: 一、基本介绍@RequiredArgsConstructor 作用于类，用于生成包含 final 和 @NonNull 注解的成员变量的构造方法二、属性介绍staticName：使生成的构造方法是私有的 并且生成一个参数为 final 变量和 @NonNull 注解变量，返回类型为当前对象的静态方法，方法名为 staticName 值access：设置构造方法的访问修饰符，如果设置了 staticName，那么将设置静态工厂方法的访问修饰符 共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE MODULE 是 Java 9 的新特性，NONE 表示不生成构造方法也不生成静态方法，即停用注解功能onConstructor：列出的所有注解都放在生成的构造方法上 JDK 7 之前的写法是 onConstructor = @__({@Deprecated})，而 JDK 8 之后的写法是 onConstructor_ = {@Deprecated}三、实战演练@RequiredArgsConstructor(staticName = "newInstance", access = AccessLevel.PROTECTED, onConstructor_ = {@Deprecated}) public class ChengXiao { private String name; private final int age; @NonNull private String phone; }public class ChengXiao { private String name; private final int age; @NonNull private String phone; @Deprecated private ChengXiao(int age, @NonNull String phone) { if (phone == null) throw new NullPointerException("phone is marked non-null but is null"); this.age = age; this.phone = phone; } protected static ChengXiao newInstance(int age, @NonNull String phone) { return new ChengXiao(age, phone); } }四、注意当类中没有 final 和 @NonNull 注解的成员变量时会生成一个无参构造方法（因为没有符合要求的参数），而很多人认为 @Data 会生成无参构造方法就是此导致的

CentOS 7 各类安装教程 传送门
type: item
date: 2023-02-02T10:06:00+08:00
description: [timeline-item][btn href="https://blog.csdn.net/qq_24410589/article/details/112646336" type="default"]CentOS 7 安装 本体 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://cloud.tencent.com/developer/article/1701451" type="default"]CentOS 7 系统 安装 Docker 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://blog.csdn.net/qimowei/article/details/122103357" type="default"]CentOS 7 系统 Docker 安装 Portainer 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://blog.csdn.net/weixin_49343190/article/details/118499260" type="default"]CentOS 7 系统 Docker 安装 Redis 5 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://www.cnblogs.com/wjw1014/p/12149399.html" type="default"]CentOS 7 系统 Docker 安装 MYSQL 5.7 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://blog.csdn.net/muriyue6/article/details/120214710" type="default"]CentOS 7 系统 Docker 安装 XXL_JOB 2.3.0 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://blog.csdn.net/weixin_40816738/article/details/113825582" type="default"]CentOS 7 系统 Docker 安装 ZooKeeper 2.5.8 详细步骤[/btn][/timeline-item][timeline-item][btn href="https://cloud.tencent.com/developer/article/1709491" type="default"]CentOS 7 系统 安装 K8S 1.16.0 详细步骤[/btn][/timeline-item]

2023.01.30 语「无问西东」
type: item
date: 2023-01-30T21:17:00+08:00
description: 如果提前了解了，你们要面对的人生，不知道你们是否还有勇气前来。看见的、听到的，经常会令你们沮丧。世俗是这样强大，强大到生不出改变它们的念头来。可是如果有机会提前了解你们的人生，知道青春也不过只有这些日子，不知你们是否还会在意那些世俗希望你们在意的事情。比如，占有多少才更荣耀、拥有什么才能被爱。等你们长大，你们会因绿芽冒出土地而喜悦，会对初升的朝阳欢呼跳跃，但是却会在赞美别的生命的同时，常常甚至永远地忘了自己的珍贵。愿你在被打击时，记起你的珍贵，抵抗恶意。愿你在迷茫时，坚信你的珍贵，爱你所爱，行你所行。听从你心，无问西东。摘自：电影《无问西东》[music id="1352962990"/]

2022.12.04 心「传承」
type: item
date: 2022-12-04T16:05:00+08:00
description: 接近了。心里总会乍现出这样的声音。十分地接近了。每当听到时，我总会默许着。是啊，接近了。不知何时开始这样暗示自己。不知几次开始这样暗示自己。无论当下做功与否，都会见证即将接近的事实。就像曾抓住过的时间，与流逝了的时间一样。我在犹豫吗？我在彷徨吗？我在怵定吗？无用的情绪，在交织着如果是她们。如果是她们的话，会怎么做。......炙热的正午与土地的泥，这是她吹过的风。擎着耒耨之教，哺育雏凤清声。少以言表的苦肉之痛，为的是子嗣。......闷热的黄昏与微呛的烟，这是她吹过的风。伴着万家灯火，积攒生存数计。少以言表的苦肉之痛，为的是家庭。......幽暗的午夜与轻浮的云，这是我吹过的风。行着车水马龙，阔步三点一线。少以言表的苦肉之痛，为的是感激。......是啊，接近了。那个即将接近，亦是煞白亦是昏黑的未来。但那又如何。平凡而又伟大的血脉。筑起后人攀登的阶梯。这是不惧风雪的阶梯，是坚不可摧的阶梯。传承下来的倔强与毅力。即是归宿，也是使命。[music id="1332711770"/]