Skip to content

Commit ee2d75a

Browse files
committed
fix some errors
1 parent adf2c4c commit ee2d75a

File tree

6 files changed

+111
-44
lines changed

6 files changed

+111
-44
lines changed

More.md

+32-6
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ For Java
144144
return null;
145145
}
146146
}
147+
```
147148

148149
The complete java doc about hijack is below
149150

@@ -159,7 +160,6 @@ The complete java doc about hijack is below
159160
public NginxHttpServerChannel hijack(NginxRequest req, boolean ignoreFilter);
160161
```
161162

162-
```
163163

164164
### Send a Complete Response for Long Polling
165165

@@ -238,16 +238,12 @@ For Java
238238
239239
```java
240240
241-
channel.addListener(channel, new ChannelListener<NginxHttpServerChannel>() {
241+
channel.addListener(channel, new ChannelCloseAdapter<NginxHttpServerChannel>() {
242242
@Override
243243
public void onClose(NginxHttpServerChannel data) {
244244
Init.serverSentEventSubscribers.remove(data);
245245
info("closed " + data.request().nativeRequest());
246246
}
247-
248-
@Override
249-
public void onConnect(long status, NginxHttpServerChannel data) {
250-
}
251247
});
252248
```
253249
@@ -543,11 +539,41 @@ public class WSEcho implements NginxJavaRingHandler {
543539
}
544540
545541
}
542+
```
546543
547544
###3.8.1 Use Access Handler For WebSocket Security
548545
546+
In below example we return 404 for non WebSocket request
547+
548+
```nginx
549+
location /my-ws {
550+
auto_upgrade_ws on;
551+
access_handler_type java;
552+
access_handler_name 'my.WSAccessHandler';
553+
content_handler_type java; ###or clojure,groovy
554+
content_handler_name 'nginx.clojure.java.WSEcho'; ###or ring handler for clojure
555+
.....
556+
}
557+
```
558+
559+
```java
560+
package my;
561+
import nginx.clojure.java.NginxJavaRingHandler;
562+
import static nginx.clojure.java.Constants.*;
563+
564+
public class WSAccessHandler implements NginxJavaRingHandler {
565+
public Object[] invoke(Map<String, Object> request) {
566+
if (GET != request.get("request-method")
567+
|| !"websocket".equals(request.get("headers").get("upgrade"))) {
568+
return new Object[]{404, null, null};
569+
}
570+
return PHASE_DONE;
571+
}
572+
}
573+
549574
```
550575
576+
551577
3.9 Java standard RESTful web services with Jersey
552578
-----------------
553579

More.md.html

+38-19
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,11 @@ <h3>
132132
<span class="pl-c">//nginx-clojure will ignore this return because we have hijacked the request.</span>
133133
<span class="pl-k">return</span> <span class="pl-c1">null</span>;
134134
}
135-
}
135+
}</pre></div>
136136

137-
<span class="pl-smi">The</span> complete java doc about hijack is below
137+
<p>The complete java doc about hijack is below</p>
138138

139-
```java
140-
<span class="pl-c">/**</span>
139+
<div class="highlight highlight-java"><pre> <span class="pl-c">/**</span>
141140
<span class="pl-c"> * Get a hijacked Server Channel used to send message later typically in another thread</span>
142141
<span class="pl-c"> * If ignoreFilter is true all data output to channel won't be filtered</span>
143142
<span class="pl-c"> * by any nginx HTTP header/body filters such as gzip filter, chucked filter, etc.</span>
@@ -147,17 +146,15 @@ <h3>
147146
<span class="pl-c"> */</span>
148147
<span class="pl-k">public</span> <span class="pl-smi">NginxHttpServerChannel</span> hijack(<span class="pl-smi">NginxRequest</span> req, <span class="pl-k">boolean</span> ignoreFilter);</pre></div>
149148

150-
<pre><code>
151-
### Send a Complete Response for Long Polling
152-
153-
When some event happen which let a complete response must be sent to the Long Polling request client we can use `send-response!`(Clojure) or sendResponse (Java/Groovy) to send a complete response. This action is non-blocking and after completion the channel will be closed automatically.
149+
<h3>
150+
<a id="user-content-send-a-complete-response-for-long-polling" class="anchor" href="#send-a-complete-response-for-long-polling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Send a Complete Response for Long Polling</h3>
154151

155-
For Clojure
152+
<p>When some event happen which let a complete response must be sent to the Long Polling request client we can use <code>send-response!</code>(Clojure) or sendResponse (Java/Groovy) to send a complete response. This action is non-blocking and after completion the channel will be closed automatically.</p>
156153

157-
```clojure
154+
<p>For Clojure</p>
158155

159-
(send-response! ch {:status 200, :headers {"content-type" "text/plain"}, :body data}
160-
</code></pre>
156+
<div class="highlight highlight-clojure"><pre>
157+
(<span class="pl-en">send-response!</span> ch {<span class="pl-c1">:status</span> <span class="pl-c1">200</span>, <span class="pl-c1">:headers</span> {<span class="pl-s"><span class="pl-pds">"</span>content-type<span class="pl-pds">"</span></span> <span class="pl-s"><span class="pl-pds">"</span>text/plain<span class="pl-pds">"</span></span>}, <span class="pl-c1">:body</span> data}</pre></div>
161158

162159
<p>For Java</p>
163160

@@ -220,16 +217,12 @@ <h3>
220217
<p>For Java</p>
221218

222219
<div class="highlight highlight-java"><pre>
223-
channel<span class="pl-k">.</span>addListener(channel, <span class="pl-k">new</span> <span class="pl-k">ChannelListener&lt;<span class="pl-smi">NginxHttpServerChannel</span>&gt;</span>() {
220+
channel<span class="pl-k">.</span>addListener(channel, <span class="pl-k">new</span> <span class="pl-k">ChannelCloseAdapter&lt;<span class="pl-smi">NginxHttpServerChannel</span>&gt;</span>() {
224221
<span class="pl-k">@Override</span>
225222
<span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">onClose</span>(<span class="pl-smi">NginxHttpServerChannel</span> <span class="pl-v">data</span>) {
226223
<span class="pl-smi">Init</span><span class="pl-k">.</span>serverSentEventSubscribers<span class="pl-k">.</span>remove(data);
227224
info(<span class="pl-s"><span class="pl-pds">"</span>closed <span class="pl-pds">"</span></span> <span class="pl-k">+</span> data<span class="pl-k">.</span>request()<span class="pl-k">.</span>nativeRequest());
228225
}
229-
230-
<span class="pl-k">@Override</span>
231-
<span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">onConnect</span>(<span class="pl-k">long</span> <span class="pl-v">status</span>, <span class="pl-smi">NginxHttpServerChannel</span> <span class="pl-v">data</span>) {
232-
}
233226
});</pre></div>
234227

235228
<h2>
@@ -520,9 +513,35 @@ <h3>
520513
<span class="pl-k">return</span> <span class="pl-c1">null</span>;
521514
}
522515

523-
}
516+
}</pre></div>
517+
518+
<h3>
519+
<a id="user-content-381-use-access-handler-for-websocket-security" class="anchor" href="#381-use-access-handler-for-websocket-security" aria-hidden="true"><span class="octicon octicon-link"></span></a>3.8.1 Use Access Handler For WebSocket Security</h3>
520+
521+
<p>In below example we return 404 for non WebSocket request </p>
522+
523+
<div class="highlight highlight-nginx"><pre><span class="pl-k">location</span> <span class="pl-en">/my-ws </span>{
524+
<span class="pl-k">auto_upgrade_ws</span> on;
525+
<span class="pl-k">access_handler_type</span> java;
526+
<span class="pl-k">access_handler_name</span> <span class="pl-s">'my.WSAccessHandler'</span>;
527+
<span class="pl-k">content_handler_type</span> java; <span class="pl-c">###or clojure,groovy</span>
528+
<span class="pl-k">content_handler_name</span> <span class="pl-s">'nginx.clojure.java.WSEcho'</span>; <span class="pl-c">###or ring handler for clojure</span>
529+
.....
530+
}</pre></div>
524531

525-
###<span class="pl-c1">3.8</span><span class="pl-k">.</span><span class="pl-c1">1</span> <span class="pl-smi">Use</span> <span class="pl-smi">Access</span> <span class="pl-smi">Handler</span> <span class="pl-smi">For</span> <span class="pl-smi">WebSocket</span> <span class="pl-smi">Security</span>
532+
<div class="highlight highlight-java"><pre><span class="pl-k">package</span> <span class="pl-smi">my</span>;
533+
<span class="pl-k">import</span> <span class="pl-smi">nginx.clojure.java.NginxJavaRingHandler</span>;
534+
<span class="pl-k">import static</span> <span class="pl-smi">nginx.clojure.java.Constants.*</span>;
535+
536+
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">WSAccessHandler</span> <span class="pl-k">implements</span> <span class="pl-e">NginxJavaRingHandler</span> {
537+
<span class="pl-k">public</span> <span class="pl-k">Object</span>[] <span class="pl-en">invoke</span>(<span class="pl-k">Map&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Object</span>&gt;</span> <span class="pl-v">request</span>) {
538+
<span class="pl-k">if</span> (<span class="pl-c1">GET</span> <span class="pl-k">!=</span> request<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>request-method<span class="pl-pds">"</span></span>)
539+
<span class="pl-k">||</span> <span class="pl-k">!</span><span class="pl-s"><span class="pl-pds">"</span>websocket<span class="pl-pds">"</span></span><span class="pl-k">.</span>equals(request<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>headers<span class="pl-pds">"</span></span>)<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>upgrade<span class="pl-pds">"</span></span>))) {
540+
<span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-smi">Object</span>[]{<span class="pl-c1">404</span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>};
541+
}
542+
<span class="pl-k">return</span> <span class="pl-c1">PHASE_DONE</span>;
543+
}
544+
}
526545
</pre></div>
527546

528547
<h2>

QuickStart.md

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Configuration
1919
jvm_path '/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so';
2020

2121
### my app jars e.g. clojure-1.5.1.jar , groovy-2.3.4.jar ,etc.
22+
### if we only use Java handler we need not place clojure-xxx.jar here.
2223
jvm_var my_other_jars 'my_jar_dir/clojure-1.5.1.jar';
2324
2425
### my app classpath, windows user should use ';' as the separator

QuickStart.md.html

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ <h2>
2626
<span class="pl-k">jvm_path</span> <span class="pl-s">'/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so'</span>;
2727

2828
<span class="pl-c">### my app jars e.g. clojure-1.5.1.jar , groovy-2.3.4.jar ,etc.</span>
29+
<span class="pl-c">### if we only use Java handler we need not place clojure-xxx.jar here.</span>
2930
<span class="pl-k">jvm_var</span> my_other_jars <span class="pl-s">'my_jar_dir/clojure-1.5.1.jar'</span>;
3031

3132
<span class="pl-c">### my app classpath, windows user should use ';' as the separator</span>

more.html

+38-19
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,11 @@ <h3>
228228
<span class="pl-c">//nginx-clojure will ignore this return because we have hijacked the request.</span>
229229
<span class="pl-k">return</span> <span class="pl-c1">null</span>;
230230
}
231-
}
231+
}</pre></div>
232232

233-
<span class="pl-smi">The</span> complete java doc about hijack is below
233+
<p>The complete java doc about hijack is below</p>
234234

235-
```java
236-
<span class="pl-c">/**</span>
235+
<div class="highlight highlight-java"><pre> <span class="pl-c">/**</span>
237236
<span class="pl-c"> * Get a hijacked Server Channel used to send message later typically in another thread</span>
238237
<span class="pl-c"> * If ignoreFilter is true all data output to channel won't be filtered</span>
239238
<span class="pl-c"> * by any nginx HTTP header/body filters such as gzip filter, chucked filter, etc.</span>
@@ -243,17 +242,15 @@ <h3>
243242
<span class="pl-c"> */</span>
244243
<span class="pl-k">public</span> <span class="pl-smi">NginxHttpServerChannel</span> hijack(<span class="pl-smi">NginxRequest</span> req, <span class="pl-k">boolean</span> ignoreFilter);</pre></div>
245244

246-
<pre><code>
247-
### Send a Complete Response for Long Polling
248-
249-
When some event happen which let a complete response must be sent to the Long Polling request client we can use `send-response!`(Clojure) or sendResponse (Java/Groovy) to send a complete response. This action is non-blocking and after completion the channel will be closed automatically.
245+
<h3>
246+
<a id="user-content-send-a-complete-response-for-long-polling" class="anchor" href="#send-a-complete-response-for-long-polling" aria-hidden="true"><span class="octicon octicon-link"></span></a>Send a Complete Response for Long Polling</h3>
250247

251-
For Clojure
248+
<p>When some event happen which let a complete response must be sent to the Long Polling request client we can use <code>send-response!</code>(Clojure) or sendResponse (Java/Groovy) to send a complete response. This action is non-blocking and after completion the channel will be closed automatically.</p>
252249

253-
```clojure
250+
<p>For Clojure</p>
254251

255-
(send-response! ch {:status 200, :headers {"content-type" "text/plain"}, :body data}
256-
</code></pre>
252+
<div class="highlight highlight-clojure"><pre>
253+
(<span class="pl-en">send-response!</span> ch {<span class="pl-c1">:status</span> <span class="pl-c1">200</span>, <span class="pl-c1">:headers</span> {<span class="pl-s"><span class="pl-pds">"</span>content-type<span class="pl-pds">"</span></span> <span class="pl-s"><span class="pl-pds">"</span>text/plain<span class="pl-pds">"</span></span>}, <span class="pl-c1">:body</span> data}</pre></div>
257254

258255
<p>For Java</p>
259256

@@ -316,16 +313,12 @@ <h3>
316313
<p>For Java</p>
317314

318315
<div class="highlight highlight-java"><pre>
319-
channel<span class="pl-k">.</span>addListener(channel, <span class="pl-k">new</span> <span class="pl-k">ChannelListener&lt;<span class="pl-smi">NginxHttpServerChannel</span>&gt;</span>() {
316+
channel<span class="pl-k">.</span>addListener(channel, <span class="pl-k">new</span> <span class="pl-k">ChannelCloseAdapter&lt;<span class="pl-smi">NginxHttpServerChannel</span>&gt;</span>() {
320317
<span class="pl-k">@Override</span>
321318
<span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">onClose</span>(<span class="pl-smi">NginxHttpServerChannel</span> <span class="pl-v">data</span>) {
322319
<span class="pl-smi">Init</span><span class="pl-k">.</span>serverSentEventSubscribers<span class="pl-k">.</span>remove(data);
323320
info(<span class="pl-s"><span class="pl-pds">"</span>closed <span class="pl-pds">"</span></span> <span class="pl-k">+</span> data<span class="pl-k">.</span>request()<span class="pl-k">.</span>nativeRequest());
324321
}
325-
326-
<span class="pl-k">@Override</span>
327-
<span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">onConnect</span>(<span class="pl-k">long</span> <span class="pl-v">status</span>, <span class="pl-smi">NginxHttpServerChannel</span> <span class="pl-v">data</span>) {
328-
}
329322
});</pre></div>
330323

331324
<h2>
@@ -616,9 +609,35 @@ <h3>
616609
<span class="pl-k">return</span> <span class="pl-c1">null</span>;
617610
}
618611

619-
}
612+
}</pre></div>
613+
614+
<h3>
615+
<a id="user-content-381-use-access-handler-for-websocket-security" class="anchor" href="#381-use-access-handler-for-websocket-security" aria-hidden="true"><span class="octicon octicon-link"></span></a>3.8.1 Use Access Handler For WebSocket Security</h3>
616+
617+
<p>In below example we return 404 for non WebSocket request </p>
618+
619+
<div class="highlight highlight-nginx"><pre><span class="pl-k">location</span> <span class="pl-en">/my-ws </span>{
620+
<span class="pl-k">auto_upgrade_ws</span> on;
621+
<span class="pl-k">access_handler_type</span> java;
622+
<span class="pl-k">access_handler_name</span> <span class="pl-s">'my.WSAccessHandler'</span>;
623+
<span class="pl-k">content_handler_type</span> java; <span class="pl-c">###or clojure,groovy</span>
624+
<span class="pl-k">content_handler_name</span> <span class="pl-s">'nginx.clojure.java.WSEcho'</span>; <span class="pl-c">###or ring handler for clojure</span>
625+
.....
626+
}</pre></div>
620627

621-
###<span class="pl-c1">3.8</span><span class="pl-k">.</span><span class="pl-c1">1</span> <span class="pl-smi">Use</span> <span class="pl-smi">Access</span> <span class="pl-smi">Handler</span> <span class="pl-smi">For</span> <span class="pl-smi">WebSocket</span> <span class="pl-smi">Security</span>
628+
<div class="highlight highlight-java"><pre><span class="pl-k">package</span> <span class="pl-smi">my</span>;
629+
<span class="pl-k">import</span> <span class="pl-smi">nginx.clojure.java.NginxJavaRingHandler</span>;
630+
<span class="pl-k">import static</span> <span class="pl-smi">nginx.clojure.java.Constants.*</span>;
631+
632+
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">WSAccessHandler</span> <span class="pl-k">implements</span> <span class="pl-e">NginxJavaRingHandler</span> {
633+
<span class="pl-k">public</span> <span class="pl-k">Object</span>[] <span class="pl-en">invoke</span>(<span class="pl-k">Map&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Object</span>&gt;</span> <span class="pl-v">request</span>) {
634+
<span class="pl-k">if</span> (<span class="pl-c1">GET</span> <span class="pl-k">!=</span> request<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>request-method<span class="pl-pds">"</span></span>)
635+
<span class="pl-k">||</span> <span class="pl-k">!</span><span class="pl-s"><span class="pl-pds">"</span>websocket<span class="pl-pds">"</span></span><span class="pl-k">.</span>equals(request<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>headers<span class="pl-pds">"</span></span>)<span class="pl-k">.</span>get(<span class="pl-s"><span class="pl-pds">"</span>upgrade<span class="pl-pds">"</span></span>))) {
636+
<span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-smi">Object</span>[]{<span class="pl-c1">404</span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>};
637+
}
638+
<span class="pl-k">return</span> <span class="pl-c1">PHASE_DONE</span>;
639+
}
640+
}
622641
</pre></div>
623642

624643
<h2>

quickstart.html

+1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ <h2>
122122
<span class="pl-k">jvm_path</span> <span class="pl-s">'/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so'</span>;
123123

124124
<span class="pl-c">### my app jars e.g. clojure-1.5.1.jar , groovy-2.3.4.jar ,etc.</span>
125+
<span class="pl-c">### if we only use Java handler we need not place clojure-xxx.jar here.</span>
125126
<span class="pl-k">jvm_var</span> my_other_jars <span class="pl-s">'my_jar_dir/clojure-1.5.1.jar'</span>;
126127

127128
<span class="pl-c">### my app classpath, windows user should use ';' as the separator</span>

0 commit comments

Comments
 (0)