Skip to content

Commit 38bd16d

Browse files
Add CORS filter
Otherwise RabbitMQ cannot reach the discovery endpoint from the browser
1 parent 71029ea commit 38bd16d

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.rabbitmq.authorization_server;
2+
3+
import java.io.IOException;
4+
import java.util.Optional;
5+
import java.util.Set;
6+
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.beans.factory.annotation.Value;
9+
import org.springframework.core.Ordered;
10+
import org.springframework.core.annotation.Order;
11+
import org.springframework.stereotype.Component;
12+
13+
import jakarta.servlet.Filter;
14+
import jakarta.servlet.FilterChain;
15+
import jakarta.servlet.FilterConfig;
16+
import jakarta.servlet.ServletException;
17+
import jakarta.servlet.ServletRequest;
18+
import jakarta.servlet.ServletResponse;
19+
import jakarta.servlet.http.HttpServletRequest;
20+
import jakarta.servlet.http.HttpServletResponse;
21+
22+
@Component
23+
@Order(Ordered.HIGHEST_PRECEDENCE)
24+
public class SimpleCORSFilter implements Filter {
25+
26+
private final Set<String> allowedOrigins;
27+
28+
@Autowired
29+
public SimpleCORSFilter(@Value("${spring.security.cors.allowed-origins:*}") Set<String> allowedOrigins) {
30+
this.allowedOrigins = allowedOrigins;
31+
}
32+
33+
@Override
34+
public void init(FilterConfig fc) throws ServletException {
35+
36+
}
37+
38+
@Override
39+
public void doFilter(ServletRequest req, ServletResponse resp,
40+
FilterChain chain) throws IOException, ServletException {
41+
HttpServletResponse response = (HttpServletResponse) resp;
42+
HttpServletRequest request = (HttpServletRequest) req;
43+
String origin = request.getHeader("referer");
44+
if(origin != null ){
45+
Optional<String> first = allowedOrigins.stream().filter(origin::startsWith).findFirst();
46+
first.ifPresent(s -> response.setHeader("Access-Control-Allow-Origin", s));
47+
}
48+
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
49+
response.setHeader("Access-Control-Max-Age", "3600");
50+
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN");
51+
52+
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
53+
response.setStatus(HttpServletResponse.SC_OK);
54+
} else {
55+
chain.doFilter(req, resp);
56+
}
57+
}
58+
59+
@Override
60+
public void destroy() {
61+
}
62+
63+
}

0 commit comments

Comments
 (0)