Add sentinel servlet adapter demo (#3422)
This commit is contained in:
parent
3892514c53
commit
02c97fef65
|
|
@ -42,6 +42,7 @@
|
|||
<module>sentinel-demo-annotation-cdi-interceptor</module>
|
||||
<module>sentinel-demo-motan</module>
|
||||
<module>sentinel-demo-transport-spring-mvc</module>
|
||||
<module>sentinel-demo-servlet</module>
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>sentinel-parent</artifactId>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<version>1.8.8</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>sentinel-demo-servlet</artifactId>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<artifactId>sentinel-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<artifactId>sentinel-transport-simple-http</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<artifactId>sentinel-web-servlet</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<configuration>
|
||||
<warName>sentinel-demo-servlet</warName>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package com.alibaba.csp.sentinel.demo.servlet.config;
|
||||
|
||||
import com.alibaba.csp.sentinel.adapter.servlet.callback.DefaultUrlBlockHandler;
|
||||
import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
|
||||
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
|
||||
/**
|
||||
* class description
|
||||
*
|
||||
* @author zhangxunwei
|
||||
* @date 2024/6/24
|
||||
*/
|
||||
public class SentinelConfig implements ServletContextListener {
|
||||
|
||||
@Override
|
||||
public void contextInitialized(ServletContextEvent servletContextEvent) {
|
||||
initConfig();
|
||||
}
|
||||
|
||||
public static void initConfig() {
|
||||
System.out.println("Init sentinel config");
|
||||
|
||||
WebCallbackManager.setUrlBlockHandler(new DefaultUrlBlockHandler());
|
||||
WebCallbackManager.setRequestOriginParser(request -> request.getHeader("S-user"));
|
||||
WebCallbackManager.setUrlCleaner(new MyUrlCleaner());
|
||||
}
|
||||
|
||||
static class MyUrlCleaner implements UrlCleaner {
|
||||
@Override
|
||||
public String clean(String originUrl) {
|
||||
if (originUrl.matches("/foo/\\d+")) {
|
||||
return "/foo/*";
|
||||
}
|
||||
|
||||
return originUrl;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contextDestroyed(ServletContextEvent servletContextEvent) {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package com.alibaba.csp.sentinel.demo.servlet.controller;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* class description
|
||||
*
|
||||
* @author zhangxunwei
|
||||
* @date 2024/6/24
|
||||
*/
|
||||
public class DefaultServlet implements Servlet {
|
||||
@Override
|
||||
public void init(ServletConfig servletConfig) throws ServletException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletConfig getServletConfig() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
|
||||
String path = ((HttpServletRequest) servletRequest).getPathInfo();
|
||||
|
||||
if (path.startsWith("/foo")) {
|
||||
handleFoo(servletRequest, servletResponse);
|
||||
} else if (path.startsWith("/bar")) {
|
||||
handleBar(servletRequest, servletResponse);
|
||||
} else {
|
||||
notFound(servletRequest, servletResponse);
|
||||
}
|
||||
}
|
||||
|
||||
private void notFound(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException {
|
||||
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
|
||||
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
|
||||
|
||||
httpServletResponse.setStatus(404);
|
||||
httpServletResponse.setContentType("text/plain");
|
||||
httpServletResponse.getWriter().write(httpServletRequest.getServletPath() + " not found.");
|
||||
httpServletResponse.getWriter().close();
|
||||
}
|
||||
|
||||
private void handleBar(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException {
|
||||
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
|
||||
|
||||
httpServletResponse.setStatus(200);
|
||||
httpServletResponse.setContentType("text/plain");
|
||||
httpServletResponse.getWriter().write("bar");
|
||||
httpServletResponse.getWriter().close();
|
||||
}
|
||||
|
||||
private void handleFoo(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException {
|
||||
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
|
||||
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
|
||||
String path = httpServletRequest.getPathInfo();
|
||||
String id = path.replaceAll("/foo/(\\d+)", "$1");
|
||||
|
||||
httpServletResponse.setStatus(200);
|
||||
httpServletResponse.setContentType("text/plain");
|
||||
httpServletResponse.getWriter().write("Hello " + id);
|
||||
httpServletResponse.getWriter().close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServletInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
project.name=sentinel-demo-servlet
|
||||
csp.sentinel.dashboard.server=http://localhost:8081
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
|
||||
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
|
||||
|
||||
<servlet>
|
||||
<servlet-name>DefaultServlet</servlet-name>
|
||||
<servlet-class>com.alibaba.csp.sentinel.demo.servlet.controller.DefaultServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>DefaultServlet</servlet-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- sentinel filter -->
|
||||
<filter>
|
||||
<filter-name>SentinelCommonFilter</filter-name>
|
||||
<filter-class>com.alibaba.csp.sentinel.adapter.servlet.CommonFilter</filter-class>
|
||||
<init-param>
|
||||
<param-name>HTTP_METHOD_SPECIFY</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
<init-param>
|
||||
<param-name>WEB_CONTEXT_UNIFY</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
</filter>
|
||||
|
||||
<filter-mapping>
|
||||
<filter-name>SentinelCommonFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
</web-app>
|
||||
|
||||
Loading…
Reference in New Issue