使用root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限。这意味着你的任何一个页面脚本(html/js)都具有root权限,可以运行页面上的脚本,具有非常大的安全风险,所以强烈建议不要使用root启动tomcat。

创建以”tomcat”命名的用户和组

useradd -s /sbin/nologin -M tomcat

说明一下/nologin类型的用户,它是[……]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

1、目前抽象类AbstractBusiService中只是做了参数校验这一项,功能比较单一,可以再多加一些实用功能,比如打印业务接口的执行耗时,可以在doHandle方法添加起始时间,执行结束时间,这样就统计出了执行耗时。代码比较简单,我就不加了。

2、可以在的印象类中加几个空方法,比如be[……]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

从上往篇看到了在抽象类中进行了统一的参数校验,本篇我将增加两个实用的场景,登录用户的身份验证及无需身份验证的接口调用处理。现在新增一个获取用户身份信息的接口 QueryProfile,接下来看实现方式。
1、新增QueryProfileImpl 类,代码比较简单,如下:

@Component[......]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

上一篇中讲解了服务的入口实现,本版将讲解本设计中一个最重要的类AbstractBusiService,它是一个抽象类,但扮演着重要的角色。
1、AbstractBusiService代码如下:

public abstract class AbstractBusiService<T, R[......]

阅读全文

服务端接口设计模式(一)
服务端接口设计模式(二)
服务端接口设计模式(三)
服务端接口设计模式(四)

1、常见的服务端接口设计模式是采用restful形式对外提供服务,我以用户登录、获取个人信息等接口作为示例,这里只展示主要的示例代码:

@RequestMapping("/user")
@RestController
public class UserController {

    @A[......]

阅读全文

今天在看一个第三方框架源码的时候,看这StringJoiner这个类,以前在拼接字符串的时候一直使用的StringBuilder,所以特别感兴趣,这里的场景是这样用的,当然这个代码是我自己写的,模拟的用法:

String[] strArr = new String[]{"str1","str2","str3","str4","str5"};
StringJoiner joiner = new S[......]

阅读全文

官方文档的说明,下面通过实例来验证这些选项的作用,印象更深

选项
选项简写
说明

–detach
-d
在后台运行容器,并且打印容器id。

–interactive
-i
即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。

–tty
-t
分配一个伪tty,一般与 -i 连用。

建立相关的测试容器
#1[......]

阅读全文

在一此场景下,如果需要动态的将某个类注册spring容器中,利用BeanDefinitionBuilder就可以达到这个目的。做个简单的demo实验,定义一个类Person:

@Setter
@Getter
public class Person {

    private String name;

    private String age;
}

手动注册bean的示例类Person[......]

阅读全文

并发之Striped64(累加器)

Striped64是在java8中添加用来支持累加器的并发组件,它可以在并发环境下使用来做某种计数,Striped64的设计思路是在竞争激烈的时候尽量分散竞争,在实现上,Striped64维护了一个base Count和一个Cell数组,计数线程会首先试图更新base变量,如果成功则退出计数,否则会认为当前竞争是很激烈的,那么就会通过Cell数组来分散计数,S[……]

阅读全文

分布式事务的实现主要有以下 5 种方案:

  • XA 方案
  • TCC 方案
  • 本地消息表
  • 可靠消息最终一致性方案
  • 最大努力通知方案

两阶段提交方案/XA方案

所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不[……]

阅读全文