云鉴黄,你懂
鉴黄是我的事业,我会一直做到死为止!——唐马儒
大家都知道,我们的网站内容安全是很重要的
比如今天张三发布一个李四的照片,然后贴上==一夜八百量大从优==
如果我们的内容未经审核就发布到网站上,那么网站的安全就得不到保障,这对祖国未来的花朵影响是很大的
但如果我们每一条都人工审核的话,会占用大量人力资源,造就更多的就业岗位 造成更多的人力成本
为了解决这个问题,阿里云带着我们的产品来啦!它就是《阿里云内容安全》,简称IAcs
那么如何使用呢?首先,打开符文页,阿不,打开阿里云官网。。。
访问阿里云官网,注册阿里云账号。如果已有阿里云账号,请跳过此步骤。
访问内容安全产品试用页面,单击立即开通,正式开通服务。
访问AccessKey管理页面,管理您的AccessKey ID和AccessKey Secret。
复制依赖
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> &l ...
迁移spring项目到springboot
嗨呀!今天是周六没上班,来把我们的spring+springmvc项目迁移到springboot吧!
首先创建springboot项目
然后一直下一步,复制我的pom
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.spring ...
spring实现简单AOP
Sometimes we may think about how to do something before the method runs
有时我们会想,如何在一些方法执行前或者执行后做一些操作
比如日志的记录、权限的鉴定等等
昨天,我们搭建了个简单的spring项目并写了几个接口
其中一个是这样的
这里返回给前端的map中的data,我是手动加的前缀“服务器对你说”
我们现在来用AOP实现
先修改我们接口中的代码,去掉前缀
然后配置AOP
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/c ...
搭建spring+springmvc项目
新建一个Maven项目
填写项目名
引入依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>webdemo</artifactId> <ve ...
Collectors.toMap()
把两个表内的数据查出来放进一个List,处理对应关系,以前我们的写法是下面这种,用了一个嵌套循环的形式,判断一下userId是否相等,如果相等,则赋值
//查询用户 List<User> userList = userDao.selectUser(); //查询用户信息 List<UserInfo> userInfoList = userInfoDao.selectUserInfo(); //遍历赋值 userList = userList.stream().peek(user -> { //遍历userInfo userInfoList.forEach(userInfo -> { //如果user的id和userInfo相等,就赋值 if (user.getId().equals(userInfo.getUserId())) { user.setUs ...
javascript防抖
JavaScript防抖:用于防止重复表单提交等场景
点击一次后,执行防抖函数antiShake,按钮设置为不可用状态,开始计时,计时结束移除不可用状态
<button onclick="antiShake(this)">防抖测试</button> <script type="application/javascript"> function antiShake(dom) { dom.setAttribute("disabled", "disabled"); setTimeout(() => { dom.removeAttribute("disabled"); }, 3000); } </script>
顺带聊聊
//计时器清零,参数需传入计时器的返回值cle ...
gitlab、jenkins、tomcat内存限制
我发现我的服务器配置有点低。。。装的东西有点多,于是我进行了一次限制内存占用
Gitlab限制内存:
vim /etc/gitlab/gitlab.rb
/etc/gitlab/gitlab.rbunicorn[‘worker_timeout’] = 60###! Minimum worker_processes is 2 at this moment###! See https://gitlab.com/gitlab-org/gitlab-foss/issues/18771unicorn[‘worker_processes’] = 2
然后重启
gitlab-ctl reconfigure
然后是jenkins内存限制
vim /etc/sysconfig/jenkins
JENKINS_JAVA_OPTIONS=”-Djava.awt.headless=true -XX:MaxPermSize=512m -Djava.awt.headless=true”
重启jenkins
systemctl restart jenkins
然后是tomcat内存限制
vim ...
jenkins构建邮件通知
开启邮箱的SMTP服务,复制授权码
下载插件
然后点击Jenkins的设置,注意密码是填我们上面复制的授权码
e44f883aaca356d9
然后在我们的项目目录下编写email模板
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title></head><body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"><table class="table" width="1000" ...
jenkins构建触发器
访问接口形式触发首先看第一种,访问接口形式触发
先到我们的项目设置,选择构建触发器
选择触发远程构建
设置token
然后保存,访问输入框下面的URL
http://121.89.163.191:8090/job/web_demo_pipeline/build?token=rubenweicowbeer
然后发现我们的项目已经开始构建了
在其他项目构建后触发第二种是在其他项目构建后触发
我们先创建一个前置工程
这个工程很简单,就输入一句话
然后回到之前项目,选择Build after other projects are built
输入前置工程后保存,构建前置工程
我们发现我们的前置工程构建后web_demo_pipeline工程也跟着构建了
定时构建第三种是定时构建
首先是语法
* * * * *分 时 天 月 周第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月的第几天,取值1~31第四个*表示第几月,取值1~12第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
一些常用的表达式
#每隔5分钟构建一次H/5 * * * ...
jenkinsのPipeline项目构建
下载插件
创建一个pipeline项目
点击下面的流水线语法
到流水线语法的片段生成器里选择Check out from version control
填入仓库和凭证,生成脚本
复制到pipeline脚本里去
然后选择sh:Shell script,生成脚本,复制
然后再选择deploy:Deploy war/ear to a container
然后填写参数,生成
最后的样子就是这样
完整脚本
pipeline { agent any stages { stage('pull') { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteC ...