使用用户名/密码和Servlet安全性保护WebSockets

RFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的,其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们谈谈协议本身内置的一些安全性:

  • HTTP请求中的Origin头仅包含标识发起该请求的主体(网页,JavaScript或任何其他客户端)所需的信息(通常是发起源的方案,主机和端口)。 对于WebSocket,此标头字段包含在客户端的打开握手中。 这用于通知服务器生成WebSocket连接请求的脚本来源。 然后,服务器可以决定相应地接受或拒绝握手请求。 这样一来,服务器就可以防止使用浏览器中使用WebSocket API的脚本对WebSocket服务器进行未经授权的跨域使用。例如,如果Java EE 7 WebSocket聊天示例已部署到WildFly并通过localhost:8080 / chat /访问, Origin标头为“ http:// localhost:8080”。 非浏览器客户端可以使用Origin头来指定请求的来源。 WebSocket服务器在接收此类请求时应格外小心。
  • 来自客户端的WebSocket打开握手必须包含Sec-WebSocket-Key和Sec-WebSocket-Version HTTP标头字段。 XMLHttpRequest可用于发出HTTP请求,并允许将标头作为该请求的一部分设置为:
    xhr.onreadystatechange = function ()
    {if (xhr.readyState == 4 && xhr.status == 200){document.getElementById("myDiv").innerHTML = xhr.responseText;}
    }
    xhr.open("GET", "http://localhost:8080", true);
    xhr.setRequestHeader("foo", "bar");
    xhr.setRequestHeader("Sec-WebSocket-Key", "myKey");
    xhr.send();

    如果XMLHttpRequest尝试设置以Sec-开头的任何头字段,则将忽略它们。 因此,恶意用户无法使用HTML和JavaScript API模拟与服务器的WebSocket连接。

除了这两种主要方法外,还可以使用任何HTTP服务器可用的客户端身份验证机制来保护WebSocket。 该技术提示将显示如何验证在WildFly上部署的Java EE 7 WebSockets。

让我们开始吧!

  • 克隆Java EE 7示例工作空间:
    git clone https://github.com/javaee-samples/javaee7-samples.git
  • “ websocket / endpoint-security”示例显示了如何从客户端启动WebSocket握手之前完成客户端身份验证。 这是通过包含以下部署描述符来触发的:
    <security-constraint><web-resource-collection><web-resource-name>WebSocket Endpoint</web-resource-name><url-pattern>/*</url-pattern><http-method>GET</http-method></web-resource-collection><auth-constraint><role-name>g1</role-name></auth-constraint>
    </security-constraint><login-config><auth-method>BASIC</auth-method><realm-name>file</realm-name>
    </login-config><security-role><role-name>g1</role-name>
    </security-role>

    有关此描述符的一些关键点:

    • <url-pattern>表示将提示对此应用程序发出的任何请求进行身份验证

    在我们的特定情况下,创建WebSocket连接的页面受到基本身份验证的保护。

  • 下载WildFly 8.1 ,解压缩并通过调用以下脚本来添加新用户:
    ./bin/add-user.sh -a -u u1 -p p1 -g g1

    这将在组“ g1”中添加密码为“ p1”的用户“ u1”。 此处指定的组需要匹配部署描述符中的<role-name>中定义。

  • 通过提供以下命令来部署样本:
    mvn wildfly:deploy

现在,当通过localhost:8080 / endpoint-security访问该应用程序时,将弹出一个安全对话框,如下所示:

techtip49浏览器安全弹出窗口

输入“ u1”作为用户名,输入“ p1”作为密码进行身份验证。 这些凭据在部署描述符中引用的组“ g1”中定义。 任何其他凭据将继续使对话框恢复。

成功验证请求后,将建立WebSocket连接,并在浏览器中显示一条消息。

如果您只想保护WebSocket URL,请从以下位置更改URL模式:

/*

至:

/websocket

在websocket.js中,更改URL以从以下位置创建WebSocket端点:

var wsUri = "ws://" + document.location.host + document.location.pathname + "websocket";

至:

var wsUri = "ws://u1:p1@" + document.location.host + document.location.pathname + "websocket";

请注意,如何在URL本身中传递凭据。 从Google Chrome 38.0.2125.104开始,如果仅WebSocket URL需要身份验证,则不会出现浏览器弹出窗口。

下一技巧提示将说明如何使用wss://协议保护WebSocket的安全。

翻译自: https://www.javacodegeeks.com/2014/10/securing-websockets-using-usernamepassword-and-servlet-security.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程池之外:Java并发并不像您想象的那么糟糕

Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff0c;我们将详细介…

vue中使用Ueditor编辑器 -- 1

一、 下载包&#xff1a; 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器&#xff0c;官网地址为&#xff1a;http://ueditor.baidu.com/website/download.html 下载解压后会得到如果下文件目录&#xff1a; 将上述Ueditor文件夹拷贝到vue项目的static文件夹中&#xff0…

编译原理--递归下降分析实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试递归下降分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 2.实验要求 对下列文法&#xff0c;用递归下降分析法对任意输入的符号串进行分析&#xff1a; &#…

vue中通过js控制页面样式方法

在使用vue.js框架的时候&#xff0c;有时候会希望在页面渲染完成之后&#xff0c;再执行函数方法来处理初始化相关的操作&#xff0c;如果只处理页面位置、宽或者高时&#xff0c;必须要在页面完全渲染之后才可以&#xff0c;页面没有加载完成之前&#xff0c;获取到的宽高不准…

快速指南:剖析JBoss BPM跨进程通信

&#xff08;文章来宾与北美红帽公司高级解决方案架构师杰伊保拉杰共同撰写&#xff09; 几周的提示与技巧文章将深入探讨JBoss BPM Suite&#xff0c;特别是有关如何在两个流程之间进行通信的问题。 在进入解决方案详细信息之前&#xff0c;让我们首先约束将要讨论的用例。 …

使用命令行工具创建WildFly OpenShift应用程序

通过使用快速入门&#xff0c;可以在OpenShift上轻松配置WildFly的新实例。 只需单击一下&#xff0c;您就可以准备就绪&#xff01; 通常&#xff0c;OpenShift的高级用户使用命令行工具 。 但是&#xff0c;您无法使用CLI工具创建WildFly墨盒。 但现在已解决错误1134134 。 …

word-break属性和css换行显示

这几天在做项目的时候&#xff0c;遇到了比较棘手的问题&#xff0c;便是在一个标签里边展示内容&#xff0c;如果说展示中文汉字&#xff0c;一点问题都没有&#xff0c;但是只要连续展示英文字母或者中文的标点符号&#xff08;中间不带空格&#xff09;&#xff0c;那么所渲…

第四种行转列

--动态处理 select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even, row_number() over (partition by StuName,BZKTypeName order by getdate()) ID into #t1 from BKLIST A --where StuName林健辉 declare sql1 varchar(max) declare sql2…

React-router的基本使用

1、安装使用 $ npm install -S react-router import { Router, Route, hashHistory } from react-router;render((<Router history{hashHistory}><Route path"/" component{App}/></Router> ), document.getElementById(app)); 1.1、版本问题 reac…

九宫格有规律高亮滚动效果

前几天朋友去面试&#xff0c;面试官要求当场用九宫格写出一个滚动有规律的大转盘滚动高亮效果&#xff0c;结果可想而知。如下图&#xff1a; 也就是说当页面刚进来的时候&#xff0c;红色方块在左上角&#xff0c;接下来按照图上所标注的箭头方向来依次循环。当我听说了这个面…

使用Maven原型高效创建Eclipse模块

Maven Archetype是一个项目模板工具包&#xff0c;可为开发人员提供生成内置或自定义脚手架工件的参数化版本的方法。 最近&#xff0c;我将其应用于我们的Xiliary P2存储库&#xff0c;以实现Eclipse模块存根创建的自动化。 由于效果很好&#xff0c;所以我认为值得在这篇文章…

framelayout

编写的mail.xml文件: <?xml version"1.0" encoding"utf-8"?><FrameLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/frame" android:layout_width"fill_parent" android:layou…

扩展Asterisk1.8.7的CLI接口

我之前有一篇文章&#xff08;http://www.cnblogs.com/MikeZhang/archive/2012/04/14/asteriskCLIAppTest20120414.html&#xff09;介绍过如何扩展asterisk的cli接口&#xff0c;本篇是它的继续&#xff0c;总结下&#xff0c;也方便我以后查阅。 大部分情况下&#xff0c;配置…

CSS中的 ',' 、''、'+'、'~'

1、群组选择器&#xff08;,&#xff09; /* 表示既h1&#xff0c;又h2 */ h1, h2 {color: red; } 2、后代选择器&#xff08;空格&#xff09; /* 表示 h1 下面的所有 span 元素&#xff0c;不管是否以 h1 为直接父元素 */ h1 span {} 3、子元素选择器&#xff08;>&#x…

单片机第三季-第七课:STM32中断体系

目录 1&#xff0c;NVIC 2&#xff0c;中断和事件的区别 3&#xff0c;优先级的概念 4&#xff0c;如何实际编程使用外部中断 5&#xff0c;STM32开发板通过按键控制LED 5.1&#xff0c;打开相应GPIO模块时钟 5.2&#xff0c;NVIC设置 5.3&#xff0c;外部中断线和配套…

【学亮IT手记】angularJS select2多选下拉框实例

永远保持对大部分知识的好奇心&#xff0c;学习从不枯燥&#xff0c;也没有被逼学习一说&#xff0c;乐此不疲才是该有的心态和境界&#xff01;&#xff01;&#xff01; 引入相关js库&#xff1a; html部分代码&#xff1a; angularJS定义数据源变量&#xff1a; 更多专业前端…

Devoxx Hackergarten的企业Web应用程序原型

我已经连续10年参加DevoxxBe了 。 这是我最喜欢的Java会议&#xff0c;但是谈话时间表并不总是最佳的&#xff1a;有时我想同时看2个精彩的谈话&#xff01; 因此&#xff0c;在Devoxx的Hackergarten&#xff0c;在参加讲座之间&#xff0c;我们中的一些人开始构建Web应用程序以…

谈一谈Http Request 与 Http Response

谈一谈Http Request 与 Http Response   写在前面的话&#xff1a;最近帮朋友弄弄微信商城&#xff0c;对于微信的基础开发&#xff0c;基本上就是各种post、get&#xff0c;有时是微信服务器向我们的服务器post、get数据&#xff0c;有时需要我们自己的服务器向微信服务器各…

增压的jstack:如何以100mph的速度调试服务器

使用jstack调试实时Java生产服务器的指南 jstack就像U2一样-从时间的黎明就一直在我们身边&#xff0c;我们似乎无法摆脱它 。 除了笑话&#xff0c;到目前为止&#xff0c;jstack是您调试军用生产服务器中最方便的工具之一。 即便如此&#xff0c;我仍然认为它在情况恶化时能够…

Zabbix监控多个JVM进程

一、场景说明&#xff1a; 我们这边的环境用的是微服务&#xff0c;每个程序都是有单独的进程及单独的端口号&#xff0c;但用jps查询出来的结果有些还会有重名的情况&#xff0c;所以某些脚本不太适用本场景&#xff1b; 二、需求说明&#xff1a; 需使用Zabbix-server监控每个…