分类目录归档:未分类

WinScp自动执行脚本

我们经常使用WinSCP工具通过sftp协议上传获取文件,本文描述通过bat批量处理文件。

首先,我们打开dos命令窗口使用 cd d :DWinSCP 打开WinSCP安装目录

上传文件:

winscp.exe /console /command “option batch continue” “option confirm off” “open sftp://user:pwd@ip:port” “option transfer binary” “put D:需要上传的文件路径 /服务器文件存放目录” “exit” /log=log_file.txt

这里为了方便理解,一一解释。

winscp421.exe /console /command     命令名
 “option batch continue”           默认批处理  
 “option confirm off”             关闭提示信息
“open ftp://user:pwd@ip:port”  user:访问用户名 ,pwd:用户密码 ,ip:ip地址,port:端口号  默认22
“option transfer binary”   使用二进制格式传送

log=log_file.txt 日志文件地址
 “exit”                     ::执行完命令后退出 

注意:以上 command 后的都为参数 需在一行体现  如想分开写 可把命令单独放到一个文件

如:aa.txt

option echo off
option transfer binary
open <sftp_or_ftp>://<user>:<password>@<host_ip>:<port> -privatekey <private_key_file>
cd <remote_dir>
put *.doc
exit

用命令执行该脚本:winscp /script=aa.txt /ini=<WinSCP.ini_location> /log=<log_file>
如果需要配置传输参数,在WinSCP.ini配置,例如PreserveTime=0保持源文件的时间戳

 

下载文件:

一下是下载文件代码,同上传一样,如需单独写脚本可 用如上方式单独保存脚本执行。

CD /d D:WinSCP
winscp.exe /console /command “option batch continue” “option confirm off” “open sftp://root:root@10.168.38.72:22” “option transfer binary” “get /test.txt D:sftptest” “exit” /log=D:sftptestlog.txt

宝塔–服务器运维面板

永远免费的服务器运维面板

 

https://www.bt.cn/

 

开源地址:https://github.com/aaPanel/BaoTa

宝塔开源许可协议:https://www.bt.cn/kyxy.html
使用手册:https://www.kancloud.cn/chudong/bt2017/424204
论坛地址:https://www.bt.cn/bbs
反馈建议: https://www.bt.cn/bbs/forum-43-1.html
Bug提交:https://www.bt.cn/bbs/forum-39-1.html

安装命令:

Centos
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
Ubuntu/Debian
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh




宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

Tomcat中给server.xml加入元素

<Context>代表了运行在<Host>上的单个Web应用,一个<Host>可以有多个< Context>元素,每个Web应用必须有唯一的URL路径,这个URL路径在<Context>中的属性

path中设定。<Context>元素的属性: 

 

path:指定访问该Web应用的URL入口,如:http://127.0.0.1:8080/helloApp1。 

 

docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。

reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

在开发阶段将reloadable属性设为true,有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web应用的发布阶段将reloadable设为false。

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="ture" >
<Context path="" docBase="aaa" debug="0" reloadable="true"/>
</Host>

 还有就是给上传目录配置静态资源映射,比如我这里的 有一个上传目录 /www/uploads ,用户上传的图片都会保存到这个 uploads 文件夹来,那如何在服务器访问这个目录呢?一样,加入:

1 <Context path="/uploads" docBase="/www/uploads" debug="0" reloadable="true" />

 

Tomcat之Session名称修改-springboot

Tomcat里面的默认session名称为jsession,在浏览器第一次访问应用的时候,就会调用request.getSession()来获取session,如果没有就会生成一个唯一的session id ,然后再通过cookie写回到浏览器,然后每次浏览器访问,都会带着这个session id, 来标示这个用户。
————————————————
版权声明:本文为CSDN博主「狂飙的yellowcong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yelllowcong/article/details/88928402

  

tomcat的session设定

需要在tomcat的配置文件里面,配置sessionCookieName 这个字段,可以修改默认的session名称

 

<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yellowcong”></Context>

  

springboot 的session名称设定

server.session.cookie.name=yellowcong

 参照:https://blog.csdn.net/yelllowcong/article/details/88928402 

修改tomcat默认的session时间

session超时设置

具体设置很简单,方法有三种:

  1. 在主页面或者公共页面中加入:session.setMaxInactiveInterval(600);参数600单位是秒,即在没有10分钟活动后,session将失效。
      这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
  2. 也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置
    // 设置为0,-1 表示永不超时
  <!-- 设置session失效,单位分 --> 
  <session-config> 
  <session-timeout>1</session-timeout> 
  </session-config>

  

  1. 直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到元素,tomcat默认设置是30分钟,只要修改这个值就可以了。

需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:1>2>3

异常:Invalid character found in the request target. The valid characters are defined in RFC 3986

一、背景

  事情是这样的,前几天做一个基本的数据库“增删改查”的需求,前端传参的方式是“JSON字符串”,后端接收到此参数后,使用阿里巴巴fastjson进行解析,然后入库。需求很简单吧,但是偏偏遇到问题了。

  我发现,JSON字符串里面无数组,纯粹的都是json结构的时候,即都是“{}”时,不会报错,传参入库没问题。但是只要传参的值里面有数组,即有“[]”的结构时,就报错。报错内容如下(我的tomcat版本是8.5.45):

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:479)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

 

二、原因

  tomcat的原因。 tomcat严格按照RFC规范进行范文解析,随着网络环境的变化,RFC规范也在不断的修改和升级中,发布了好多版本。而tomcat的不同版本中,采用的RFC规范的版本是不同的。所以你会在下文发现,有的低版本tomcat没有这个问题。

  tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请求参数)必须做转义操作。例如:RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。

  Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。目前RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多在标准内的论题,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中——百度百科。

  附上网络大牛的源码分析:

分析的是org.apache.tomcat.util.http.parser.HttpParser

//tomcat 8.2.3 版本及 tomcat 7.0.82 ,都有如下代码,读取配置
String prop = System.getProperty("tomcat.util.http.parser.HttpParser.requestTargetAllow");
if (prop != null) {
    for (int i = 0; i < prop.length(); i++) {
        char c = prop.charAt(i);
        if (c == ‘{‘ || c == ‘}‘ || c == ‘|‘) {
            REQUEST_TARGET_ALLOW[c] = true;
        } else {
            log.warn(sm.getString("httpparser.invalidRequestTargetCharacter",Character.valueOf(c)));
        }
    }
}

而tomcat 8.0.14 版本中并没有读取配置,对 | { } 的处理,而是默认为合法字符。
static {
    for (int i = 0; i < 128; i++) {
        if (i < 32) {
            isToken[i] = false;
        } else if (i == ‘(‘ || i == ‘)‘ || i == ‘<‘ || i == ‘>‘  || i == ‘@‘  ||
                   i == ‘,‘ || i == ‘;‘ || i == ‘:‘ || i == ‘\‘ || i == ‘"‘ ||
                   i == ‘/‘ || i == ‘[‘ || i == ‘]‘ || i == ‘?‘  || i == ‘=‘  ||
                   i == ‘{‘ || i == ‘}‘ || i == ‘ ‘ || i == ‘t‘) {
            isToken[i] = false;
        } else {
            isToken[i] = true;
        }
        if (i >= ‘0‘ && i <= ‘9‘ || i >= ‘A‘ && i <= ‘F‘ ||i >= ‘a‘ && i <= ‘f‘) {
            isHex[i] = true;
        } else {
            isHex[i] = false;
        }
    }
}
可以看出在 8.0.x 左右的一些版本中,tomcat.util.http.parser.HttpParser. requestTargetAllow (下文方法三)这个配置是没有生效的,即| { } 这3个符号认为是合法的。

 

三、解决

  注:我是使用“方法五”解决问题的,推荐“方法五”。

  方法一:换到低版本的Tomcat。

  方法二:在Catalina.properties中添加tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}这个东西明显是允许“|”和大括号的,但是我现在的问题是中括号。

  方法三:添加tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true这个是允许url中带有特殊字符的。试过了,也不好使。

  方法四:对传递的“JSON字符串”进行url编码后在传递,可以规避这个方括号。前端用“encodeURI(xxx)”方法编码,后端用“URLDecoder.decode(xxx, “utf-8”)”解码即可。

  方法五:在tomcat目录的conf文件夹下,server.xml的Connector中添加了这个relaxedQueryChars=”[,]”。

      注:

1、如果还有其他特殊的字符串,也可以直接添加到这个属性里;

2、如果你是springboot项目,可以在SpringBootApplication的的main方法中增加:System.setProperty(“tomcat.util.http.parser.HttpParser.requestTargetAllow”,”[]”);       技术分享图片

参考

1、https://blog.csdn.net/Hitler698/article/details/85720156

2、https://my.oschina.net/pding/blog/1794176

3、http://www.bubuko.com/infodetail-3238579.html

如何将解压版的tomcat设置为windows 服务启动

在web服务器上通常需要是web容器随开机自动启动,恰好Tomcat可以作为服务启动,只要经过我们简单的配置,就可以将免安装版的Tomcat添加到系统服务中。

1.1一个服务器上只有一个tomcat的情况

    首先需要配置以下环境变量:

   JAVA_HOME:JDK 路径

   JRE_HOME:JRE 路径

   CATALINA_HOME:Tomcat 路径

在 path 环境变量最前面加入:%JAVA_HOME%bin;%CATALINA_HOME%bin;

1.2一个服务器上只有多个tomcat的情况

  在binservice.bat、shutdown.bat、startup.bat三个文件顶部都添加如下内容

SET "JAVA_HOME=C:Program FilesJavajdk1.8.0_131"
SET "CATALINA_HOME=D:apache-tomcat-8.5.47-BIMPlatform"

  JAVA_HOME为安装的jdk的目录

        CATALINA_HOME为当前tomcat的跟目录

2.好了,环境变量配置完成,接着在 CMD 下运行 service.bat install

C:Usersyuhuashi>service.bat install               或者 service.bat install servername
Installing the service ‘Tomcat6’ …
Using CATALINA_HOME: “D:ProgramerFilesapache-tomcat-6.0.35”
Using CATALINA_BASE: “D:ProgramerFilesapache-tomcat-6.0.35”
Using JAVA_HOME: “d:ProgramerFilesJavajdk1.6.0_30”
Using JVM: “d:ProgramerFilesJavajdk1.6.0_30\jrebinserverjvm.
dll”
The service ‘Tomcat6’ has been installed.

现在 Tomcat 服务已经安装在系统中了,继续运行 services.msc 打开服务管理控制台。

找到 Apache Tomcat 服务,右键选择属性,修改启动类型为“自动”或“自动(延迟启动)”并确定。

搞定,再次开机时 Tomcat 就会随系统自动启动了。

 

3.如果想移除的命令为

service.bat uninstall
service.bat uninstall servername

  

mysql 8.0.11 用Navicat远程无法连接

症状:

安装了mysql 8.0.11 之后本地可以登录,但是远程第三方工具无法连接,防火墙已经放通的,

解决之道:

首先登陆到mysql命令行:

mysql -u root -p
1
进入之后选择mysql库,用户信息都存在这个库的user表中

use mysql;
1
select host, user, authentication_string, plugin from user
1
可以看到,用户对应的主机是localhost,而不是%,所以不能连接。 
处理方法: 
1、授权root用户可以远程登陆

GRANT ALL ON *.* TO ‘root’@’%’;
1
2、刷新权限

flush privileges;
1
3、修改加密规则

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘yourpassword’ PASSWORD EXPIRE NEVER; 
1
4、更新 root 用户密码

ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘yourpassword’;
1
5、刷新权限

FLUSH PRIVILEGES; 
1
测试连接。用 Navicat 连接数据库就可以正常连接了。

另,给普通用户远程连接的权限: 
1、授权 myuser 用户对指定库的所有表,所有权限并设置远程访问

GRANT ALL ON 指定库.* TO ‘myuser’@’%’;
1
2、更新 该 用户密码

ALTER USER ‘myuser’@’%’ IDENTIFIED WITH mysql_native_password BY ‘yourpassword’; 
1
3.刷新权限

FLUSH PRIVILEGES;
———————