1+ package io.openfuture.api.config.filter
2+
3+ import io.openfuture.api.config.propety.AuthorizationProperties
4+ import io.openfuture.api.util.getIpRange
5+ import org.springframework.security.web.util.matcher.IpAddressMatcher
6+ import java.io.IOException
7+ import javax.servlet.*
8+ import javax.servlet.http.HttpServletRequest
9+ import javax.servlet.http.HttpServletResponse
10+
11+
12+ class IpAddressFilter (
13+ private val properties : AuthorizationProperties
14+ ) : Filter {
15+
16+ private val IPV4_LOOPBACK = " 127.0.0.1"
17+ private val IPV6_LOOPBACK = " 0:0:0:0:0:0:0:1"
18+ private var ipList = arrayListOf<String >()
19+ var allowLocalhost = true
20+
21+ override fun init (filterConfig : FilterConfig ? ) {
22+ ipList = getIpRange(properties.cidr!! )
23+ ipList.stream().map { ip -> print (ip) }
24+ }
25+
26+ override fun doFilter (request : ServletRequest , response : ServletResponse , chain : FilterChain ) {
27+ request as HttpServletRequest
28+ response as HttpServletResponse
29+
30+ println (" REMOTE ADDRESS ${request.getHeader(" X-Forwarded-For" )} " )
31+
32+
33+ if (! isAllowed(request)) {
34+ println (" DENIED" )
35+ deny(response)
36+ return
37+ }
38+ chain.doFilter(request, response)
39+ }
40+
41+ @Throws(IOException ::class )
42+ fun deny (res : HttpServletResponse ) {
43+ res.sendError(HttpServletResponse .SC_NOT_FOUND )
44+ }
45+
46+ override fun destroy () {
47+
48+ }
49+
50+ fun isAllowed (request : HttpServletRequest ): Boolean {
51+
52+ val ip = request.remoteAddr
53+ if (allowLocalhost && (IPV4_LOOPBACK == ip || IPV6_LOOPBACK == ip)) {
54+ return true
55+ }
56+ /* var uri = request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE) as String
57+ if (!StringUtils.isEmpty(uri)) {
58+ uri = request.requestURI
59+ if (request.contextPath != "/" && uri.startsWith(request.contextPath)) {
60+ uri = uri.substring(request.contextPath.length)
61+ }
62+ }*/
63+
64+ val matcher = IpAddressMatcher (" 192.168.1.0/24" )
65+
66+ if (! matcher.matches(request.getHeader(" X-Forwarded-For" ))) {
67+ return true
68+ }
69+
70+ return false
71+ }
72+ }
0 commit comments