栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

日常问题记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日常问题记录

点击劫持,X- frame- Options头丢失 X-frame-Options

下面介绍下X-frame-Options主要用处是用于防止点击劫持,点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。 HTTP响应头信息中的X-frame-Options,可以指示浏览器是否应该加载一个iframe中的页面。如果服务器响应头信息中没有X-frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置X-frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。

X-frame-Options响应头。赋值有如下三种:

DENY:不能被嵌入到任何iframe或者frame中。SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中ALLOW-FROM uri:只能被嵌入到指定域名的框架中

从这里就可以看到,是因为Spring Security默认设置X-frame-Options响应头是 DENY,也就是不能被嵌入到任何iframe中,这也造成了我们无法正常显示eureka页面,所以我们需要在Spring Security的配置文件中设置关闭X-frame-Options即可,也就是加入下面这句

链接地址

算法学习

数据结构可视化 (usfca.edu)

linux 设置远程和终端限制
vim /etc/pam.d/sshd 
vim /etc/pam.d/system-auth
auth required pam_tally2.so  onerr=fail  deny=3  unlock_time=120 even_deny_root root_unlock_time=120
nginx平滑升级
nginx平滑升级
一、下载最新版本的nginx包
       进入nginx官网查看最新版本的nginx
      wget http://nginx.org/download/nginx-1.21.4.tar.gz
二、解压编译
      解压压缩包 tar -xzvf nginx-1.21.4.tar.gz
      准备 cd nginx-1.21.4
      ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module
      编译 make
三、替换nginx
      执行完编译之后,不执行安装操作。直接替换原文件中的nginx启动文件。
      安全起见,先将原来的启动文件备份。 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
      复制编译后的启动文件到目录sbin下。 cp ./objs/nginx /usr/local/nginx/sbin/
四、升级
      首先,测试一下复制过来的文件的生效情况。 /usr/local/nginx/sbin/nginx -t
      如果看到 successful 则代表没问题,可以重启nginx服务进行平滑的升级了。
      如果出现 nginx: [emerg] the "ssl" parameter requires ngx_http_v2_module in /usr/local/nginx/conf/nginx.conf :32  说明是在准备工作是缺少了依赖配置,应重新从./configure开始。要在./configure后加上--with-http_v2_module的依赖。相似错误同理
      如果出现XX no such file。找不到相关文件,则要去nginx.conf重新配置路径。
五、验证
      升级完成之后可以通过 /usr/local/nginx/sbin/nginx -v 来查看nginx的版本是否已成功升级
es的too_many_buckets_exception
https://stackoverflow.com/questions/58234784/too-many-buckets-exception-in-elasticsearch
遇到
ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=]];嵌套:ElasticsearchException[Elasticsearch 异常 [type=too_many_buckets_exception,原因=尝试创建太多存储桶。必须小于或等于: [20000] 但为 [20001]。可以通过更改 [search.max_buckets] 集群级别设置来设置此限制

通过更改更改 [search.max_buckets] 集群级别设置来设置此限制

PUT /_cluster/settings { "persistent" : { "search.max_buckets":20000 } }
如果您使用的是 ES 版本 7.x.x,则可以向查询中添加子句,以限制将数据划分到的存储桶数。这主要发生在您尝试聚合的数据具有高度随机性时。terminate_after
如果数据包含文本,则最好在字段上聚合(假设您使用的是默认设置)。.keyword
POST your_index/_search
{
  "from": 0,
  "query": {
    "match_all": {}
  },
  "size": 0,
  "sort": [
    {
      "your_target_field": {
        "order": "desc"
      }
    }
  ],
  "terminate_after": 10000,
  "version": true,
  "aggs": {
    "title": {
      "terms": {
        "field": "your_target_field.keyword",
        "size": 10000
      }
    }
  }
}
@Validated和@Valid 1.分组

@Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。

例如:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
@documented
@Constraint(validatedBy = { })
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";

	Class[] groups() default { };

	Class[] payload() default { };

	
	@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
	@Retention(RUNTIME)
	@documented
	@interface List {

		NotNull[] value();
	}


}

@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上

两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能。

2.位置

@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上

3.嵌套验证

嵌套验证就是类嵌套类的验证,比如我要在集合上加一个@Notnull的注解,要求该集合中的每一个对象都被验证,如果只用@Validated与@Valid是不会验证的。我们要用@Validated配合@Valid来进行验证。

@Valid就是在方法入参中加入@Validated  在成员属性上加 @Valid
总结

@Validated:用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

@Valid:用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

nginx 配置https 第一步:nginx 的 ssl 模块安装

查看 nginx 是否安装 http_ssl_module 模块。

 /usr/local/nginx/sbin/nginx -V   
 
 /home/bin/nginx/nginx -V  本次安装为 /home/bin/nginx路径

出现:

nginx version: nginx/1.14.0
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4) 
built with OpenSSL 1.0.2p  14 Aug 2018
TLS SNI support enabled
configure arguments: --sbin-path=/home/bin/nginx/nginx --conf-path=/home/bin/nginx/nginx.conf --pid-path=/home/bin/nginx/nginx.pid --with-http_ssl_module --with-pcre=/home/bin/pcre-8.42 --with-zlib=/home/bin/zlib-1.2.11 --with-openssl=/home/bin/openssl-1.0.2p --with-http_gzip_static_module

如果出现 (configure arguments: --with-http_ssl_module), 则已安装。

一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/usr/local/nginx-1.14.0),进入目录后,输入

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make 
#切记不要执行make install,否则会重新安装nginx

上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件

​ 接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务。

./nginx -s stop #停止nginx服务

#替换之前的nginx
cp /usr/local/nginx-1.14.0 /usr/local/nginx/sbin

成功之后,进入到nginx安装目录下,查看ssl时候成功

#注意这里是大写的V,小写的只显示版本号
./nginx -V  
#可以看到这里出现了configure arguments: --with-http_ssl_module   证明已经安装成功
第二步:配置ssl证书

解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)

将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹。

#在root目录下创建card文件夹
/usr/local/nginx-1.14.0
mkdir card
第三步:进行nginx.conf配置

进入nginx.conf文件下

cd /usr/locla/nginx/conf
#修改nginx.conf文件
vim nginx.conf

配置 https server。
注释掉之前的 http server 配置,新增 https server:

然后进行配置,输入:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
  server {
   # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
    listen 443;
   # 域名,多个以空格分开
    server_name xxx.com; 
    ssl on;
    #ssl证书的pem文件路径
    ssl_certificate  /root/card/huiblog.top.pem;
    #ssl证书的key文件路径
    ssl_certificate_key /root/card/huiblog.top.key;
    location / {
     proxy_pass  http://公网地址:项目端口号;
    }
}
server {
    listen 80;
    server_name xxx.com;
    #将请求转成https
    rewrite ^(.*)$ https://$host$1 permanent;
}
}

注意:这里需要在安全组中开放443端口。

第四步:重启nginx

ok,如果上述步骤都完成了,没有问题,接下来只需要重启nginx服务即可。

进入sbin目录下,输入

./nginx -s reload
./nginx -s stop
./nginx 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731864.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号