1. 支持Spring boot3.3.0 2. 编译版本支持到java 17
This commit is contained in:
parent
80f061bf5b
commit
60db901079
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-cluster</artifactId>
|
<artifactId>magic-api-plugin-cluster</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-elasticsearch</artifactId>
|
<artifactId>magic-api-plugin-elasticsearch</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-git</artifactId>
|
<artifactId>magic-api-plugin-git</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-mongo</artifactId>
|
<artifactId>magic-api-plugin-mongo</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-redis</artifactId>
|
<artifactId>magic-api-plugin-redis</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-springdoc</artifactId>
|
<artifactId>magic-api-plugin-springdoc</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-plugins</artifactId>
|
<artifactId>magic-api-plugins</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-plugin-swagger</artifactId>
|
<artifactId>magic-api-plugin-swagger</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-servlet</artifactId>
|
<artifactId>magic-api-servlet</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-servlet-jakarta</artifactId>
|
<artifactId>magic-api-servlet-jakarta</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
@ -19,7 +19,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>jakarta.servlet</groupId>
|
<groupId>jakarta.servlet</groupId>
|
||||||
<artifactId>jakarta.servlet-api</artifactId>
|
<artifactId>jakarta.servlet-api</artifactId>
|
||||||
<optional>true</optional>
|
<!-- <scope>provided</scope>-->
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
@ -27,13 +27,17 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.10.1</version>
|
<version>3.8.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>17</source>
|
<source>17</source>
|
||||||
<target>17</target>
|
<target>17</target>
|
||||||
<encoding>UTF-8</encoding>
|
<compilerArgs>
|
||||||
|
<arg>-parameters</arg>
|
||||||
|
</compilerArgs>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -24,10 +24,13 @@ public class MagicJakartaServletConfiguration implements WebMvcConfigurer {
|
|||||||
private final MagicJakartaCorsFilter magicCorsFilter = new MagicJakartaCorsFilter();
|
private final MagicJakartaCorsFilter magicCorsFilter = new MagicJakartaCorsFilter();
|
||||||
|
|
||||||
private final ObjectProvider<MagicJakartaWebRequestInterceptor> magicWebRequestInterceptorProvider;
|
private final ObjectProvider<MagicJakartaWebRequestInterceptor> magicWebRequestInterceptorProvider;
|
||||||
|
private final WebIPLimitRequestInterceptor webIPLimitRequestInterceptor;
|
||||||
|
|
||||||
public MagicJakartaServletConfiguration(MagicAPIProperties properties, ObjectProvider<MagicJakartaWebRequestInterceptor> magicWebRequestInterceptorProvider) {
|
|
||||||
|
public MagicJakartaServletConfiguration(MagicAPIProperties properties, ObjectProvider<MagicJakartaWebRequestInterceptor> magicWebRequestInterceptorProvider , WebIPLimitRequestInterceptor webIPLimitRequestInterceptorProvider) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
this.magicWebRequestInterceptorProvider = magicWebRequestInterceptorProvider;
|
this.magicWebRequestInterceptorProvider = magicWebRequestInterceptorProvider;
|
||||||
|
this.webIPLimitRequestInterceptor = webIPLimitRequestInterceptorProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -55,6 +58,7 @@ public class MagicJakartaServletConfiguration implements WebMvcConfigurer {
|
|||||||
@Override
|
@Override
|
||||||
public void addInterceptors(InterceptorRegistry registry) {
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
registry.addInterceptor(magicWebRequestInterceptorProvider.getObject()).addPathPatterns("/**");
|
registry.addInterceptor(magicWebRequestInterceptorProvider.getObject()).addPathPatterns("/**");
|
||||||
|
registry.addInterceptor(webIPLimitRequestInterceptor).addPathPatterns(properties.getWeb()+"/**");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
package org.ssssssss.magicapi.servlet.jakarta;
|
||||||
|
|
||||||
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
|
||||||
|
|
||||||
|
public interface MagicWebInterceptor extends HandlerInterceptor {
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
package org.ssssssss.magicapi.servlet.jakarta;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jdk.jfr.DataAmount;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.ssssssss.magicapi.utils.IpUtils;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web 接口管理界面 IP白名单
|
||||||
|
*/
|
||||||
|
public class WebIPLimitRequestInterceptor implements MagicWebInterceptor {
|
||||||
|
|
||||||
|
public final static String START_PLUGIN_LOG_MSG="已开启[{}],如需关闭[{}],插件配置信息:[{}]";
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(WebIPLimitRequestInterceptor.class);
|
||||||
|
/**
|
||||||
|
* 白名单
|
||||||
|
*/
|
||||||
|
private String whitelist;
|
||||||
|
|
||||||
|
private String blacklist;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void initIpLimitRequestInterceptor() {
|
||||||
|
log.info(START_PLUGIN_LOG_MSG, "Web UI IP白名单", "magic-api.api-iplimit.enable=false", "magic-api.api-iplimit.whitelist=ip地址逗号分隔");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean isIpInBlacklist(String ip) {
|
||||||
|
return blacklist!=null&&!blacklist.isEmpty() && blacklist.contains(ip);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
String ip = IpUtils.getRealIP(request.getRemoteAddr(), request::getHeader, null);
|
||||||
|
if (ip == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
boolean isAllow = !isIpInBlacklist(ip);
|
||||||
|
if (whitelist != null && !whitelist.isEmpty() && !whitelist.contains(ip)) {
|
||||||
|
isAllow=false;
|
||||||
|
}
|
||||||
|
if (!isAllow ) {
|
||||||
|
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
|
||||||
|
response.setContentType("text/plain;charset=UTF-8");
|
||||||
|
PrintWriter writer = response.getWriter();
|
||||||
|
writer.write(String.format("当前IP:[%s]无权访问该资源,请联系管理员!", ip));
|
||||||
|
writer.flush();
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWhitelist() {
|
||||||
|
return whitelist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWhitelist(String whitelist) {
|
||||||
|
this.whitelist = whitelist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBlacklist() {
|
||||||
|
return blacklist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlacklist(String blacklist) {
|
||||||
|
this.blacklist = blacklist;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<parent>
|
|
||||||
<groupId>org.ssssssss</groupId>
|
|
||||||
<artifactId>magic-api-servlet</artifactId>
|
|
||||||
<version>2.1.1</version>
|
|
||||||
</parent>
|
|
||||||
<artifactId>magic-api-servlet-javaee</artifactId>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<name>magic-api-servlet-javaee</name>
|
|
||||||
<description>auto generate http api</description>
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicCookie;
|
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
|
|
||||||
public class MagicJavaEECookie implements MagicCookie {
|
|
||||||
|
|
||||||
private final Cookie cookie;
|
|
||||||
|
|
||||||
public MagicJavaEECookie(Cookie cookie) {
|
|
||||||
this.cookie = cookie;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return cookie.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getValue() {
|
|
||||||
return cookie.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> T getCookie() {
|
|
||||||
return (T) cookie;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.ssssssss.magicapi.core.config.MagicCorsFilter;
|
|
||||||
|
|
||||||
import javax.servlet.*;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class MagicJavaEECorsFilter extends MagicCorsFilter implements Filter {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
|
||||||
super.process(new MagicJavaEEHttpServletRequest((HttpServletRequest) request, null), new MagicJavaEEHttpServletResponse((HttpServletResponse) response));
|
|
||||||
chain.doFilter(request, response);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,136 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.springframework.core.MethodParameter;
|
|
||||||
import org.springframework.http.HttpInputMessage;
|
|
||||||
import org.springframework.http.server.ServletServerHttpRequest;
|
|
||||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
|
||||||
import org.springframework.web.context.request.NativeWebRequest;
|
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
|
||||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
|
||||||
import org.springframework.web.multipart.MultipartRequest;
|
|
||||||
import org.springframework.web.multipart.MultipartResolver;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicCookie;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpSession;
|
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.security.Principal;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
|
|
||||||
public class MagicJavaEEHttpServletRequest implements MagicHttpServletRequest {
|
|
||||||
|
|
||||||
private final HttpServletRequest request;
|
|
||||||
|
|
||||||
private final MultipartResolver multipartResolver;
|
|
||||||
|
|
||||||
public MagicJavaEEHttpServletRequest(HttpServletRequest request, MultipartResolver multipartResolver) {
|
|
||||||
this.request = request;
|
|
||||||
this.multipartResolver = multipartResolver;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHeader(String name) {
|
|
||||||
return request.getHeader(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Enumeration<String> getHeaders(String name) {
|
|
||||||
return request.getHeaders(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRequestURI() {
|
|
||||||
return request.getRequestURI();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMethod() {
|
|
||||||
return request.getMethod();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAttribute(String key, Object value) {
|
|
||||||
request.setAttribute(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] getParameterValues(String name) {
|
|
||||||
return request.getParameterValues(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getAttribute(String name) {
|
|
||||||
return request.getAttribute(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HttpInputMessage getHttpInputMessage() {
|
|
||||||
return new ServletServerHttpRequest(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getContentType() {
|
|
||||||
return request.getContentType();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MagicHttpSession getSession() {
|
|
||||||
return new MagicJavaEEHttpSession(request.getSession());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MagicCookie[] getCookies() {
|
|
||||||
Cookie[] cookies = request.getCookies();
|
|
||||||
if (cookies == null) {
|
|
||||||
return new MagicJavaEECookie[0];
|
|
||||||
}
|
|
||||||
return Arrays.stream(request.getCookies()).map(MagicJavaEECookie::new).toArray(MagicJavaEECookie[]::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream getInputStream() throws IOException {
|
|
||||||
return request.getInputStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isMultipart() {
|
|
||||||
return multipartResolver.isMultipart(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRemoteAddr() {
|
|
||||||
return request.getRemoteAddr();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartRequest resolveMultipart() {
|
|
||||||
return multipartResolver.resolveMultipart(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Principal getUserPrincipal() {
|
|
||||||
return request.getUserPrincipal();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> T getRequest() {
|
|
||||||
return (T) request;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ArgumentsResolver implements HandlerMethodArgumentResolver {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supportsParameter(MethodParameter parameter) {
|
|
||||||
return parameter.getParameterType() == MagicHttpServletRequest.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
|
|
||||||
return new MagicJavaEEHttpServletRequest(webRequest.getNativeRequest(HttpServletRequest.class), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.springframework.core.MethodParameter;
|
|
||||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
|
||||||
import org.springframework.web.context.request.NativeWebRequest;
|
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
|
||||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicCookie;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpServletResponse;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public class MagicJavaEEHttpServletResponse implements MagicHttpServletResponse {
|
|
||||||
|
|
||||||
private final HttpServletResponse response;
|
|
||||||
|
|
||||||
|
|
||||||
public MagicJavaEEHttpServletResponse(HttpServletResponse response) {
|
|
||||||
this.response = response;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setHeader(String name, String value) {
|
|
||||||
response.setHeader(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addHeader(String name, String value) {
|
|
||||||
response.addHeader(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendRedirect(String location) throws IOException {
|
|
||||||
response.sendRedirect(location);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCookie(MagicCookie cookie) {
|
|
||||||
response.addCookie(cookie.getCookie());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setContentType(String contentType) {
|
|
||||||
response.setContentType(contentType);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCharacterEncoding(String characterEncoding) {
|
|
||||||
response.setCharacterEncoding(characterEncoding);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OutputStream getOutputStream() throws IOException {
|
|
||||||
return response.getOutputStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getHeaderNames() {
|
|
||||||
return response.getHeaderNames();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> T getResponse() {
|
|
||||||
return (T) response;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static class ArgumentsResolver implements HandlerMethodArgumentResolver {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supportsParameter(MethodParameter parameter) {
|
|
||||||
return parameter.getParameterType() == MagicHttpServletResponse.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
|
|
||||||
return new MagicJavaEEHttpServletResponse(webRequest.getNativeResponse(HttpServletResponse.class));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpSession;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpSession;
|
|
||||||
|
|
||||||
public class MagicJavaEEHttpSession implements MagicHttpSession {
|
|
||||||
|
|
||||||
private final HttpSession session;
|
|
||||||
|
|
||||||
public MagicJavaEEHttpSession(HttpSession session) {
|
|
||||||
this.session = session;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getAttribute(String key) {
|
|
||||||
return session.getAttribute(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAttribute(String key, Object value) {
|
|
||||||
session.setAttribute(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> T getSession() {
|
|
||||||
return (T) session;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.springframework.web.multipart.MultipartResolver;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpServletResponse;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicRequestContextHolder;
|
|
||||||
|
|
||||||
public class MagicJavaEERequestContextHolder implements MagicRequestContextHolder {
|
|
||||||
|
|
||||||
private final MultipartResolver multipartResolver;
|
|
||||||
|
|
||||||
public MagicJavaEERequestContextHolder(MultipartResolver multipartResolver) {
|
|
||||||
this.multipartResolver = multipartResolver;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MagicHttpServletRequest getRequest() {
|
|
||||||
return convert(servletRequestAttributes -> new MagicJavaEEHttpServletRequest(servletRequestAttributes.getRequest(), multipartResolver));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MagicHttpServletResponse getResponse() {
|
|
||||||
return convert(servletRequestAttributes -> new MagicJavaEEHttpServletResponse(servletRequestAttributes.getResponse()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,104 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.ssssssss.magicapi.core.context.RequestContext;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicHttpServletResponse;
|
|
||||||
import org.ssssssss.magicapi.modules.servlet.ResponseModule;
|
|
||||||
import org.ssssssss.script.annotation.Comment;
|
|
||||||
import org.ssssssss.script.functions.ExtensionMethod;
|
|
||||||
import org.ssssssss.script.functions.ObjectConvertExtension;
|
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class MagicJavaEEResponseExtension implements ExtensionMethod {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加cookie
|
|
||||||
*/
|
|
||||||
@Comment("添加Cookie")
|
|
||||||
public ResponseModule addCookie(ResponseModule module, @Comment(name = "cookie", value = "Cookie对象") Cookie cookie) {
|
|
||||||
if (cookie != null) {
|
|
||||||
MagicHttpServletResponse response = RequestContext.getHttpServletResponse();
|
|
||||||
if (response != null) {
|
|
||||||
response.addCookie(new MagicJavaEECookie(cookie));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量添加cookie
|
|
||||||
*/
|
|
||||||
@Comment("批量添加Cookie")
|
|
||||||
public ResponseModule addCookies(ResponseModule module, @Comment(name = "cookies", value = "Cookies") Map<String, String> cookies) {
|
|
||||||
return addCookies(module, cookies, null);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加cookie
|
|
||||||
*/
|
|
||||||
@Comment("添加Cookie")
|
|
||||||
public ResponseModule addCookie(ResponseModule module, @Comment(name = "name", value = "Cookie名") String name,
|
|
||||||
@Comment(name = "value", value = "Cookie值") String value,
|
|
||||||
@Comment(name = "options", value = "Cookie选项,如`path`、`httpOnly`、`domain`、`maxAge`") Map<String, Object> options) {
|
|
||||||
if (StringUtils.isNotBlank(name)) {
|
|
||||||
Cookie cookie = new Cookie(name, value);
|
|
||||||
if (options != null) {
|
|
||||||
Object path = options.get("path");
|
|
||||||
if (path != null) {
|
|
||||||
cookie.setPath(path.toString());
|
|
||||||
}
|
|
||||||
Object httpOnly = options.get("httpOnly");
|
|
||||||
if (httpOnly != null) {
|
|
||||||
cookie.setHttpOnly("true".equalsIgnoreCase(httpOnly.toString()));
|
|
||||||
}
|
|
||||||
Object domain = options.get("domain");
|
|
||||||
if (domain != null) {
|
|
||||||
cookie.setDomain(domain.toString());
|
|
||||||
}
|
|
||||||
Object maxAge = options.get("maxAge");
|
|
||||||
int age;
|
|
||||||
if (maxAge != null && (age = ObjectConvertExtension.asInt(maxAge, Integer.MIN_VALUE)) != Integer.MIN_VALUE) {
|
|
||||||
cookie.setMaxAge(age);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
addCookie(module, cookie);
|
|
||||||
}
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加cookie
|
|
||||||
*/
|
|
||||||
@Comment("添加Cookie")
|
|
||||||
public ResponseModule addCookie(ResponseModule module, @Comment(name = "name", value = "cookie名") String name,
|
|
||||||
@Comment(name = "value", value = "cookie值") String value) {
|
|
||||||
if (StringUtils.isNotBlank(name)) {
|
|
||||||
addCookie(module, new Cookie(name, value));
|
|
||||||
}
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量添加cookie
|
|
||||||
*/
|
|
||||||
@Comment("批量添加Cookie")
|
|
||||||
public ResponseModule addCookies(ResponseModule module,
|
|
||||||
@Comment(name = "cookies", value = "Cookies") Map<String, String> cookies,
|
|
||||||
@Comment(name = "options", value = "Cookie选项,如`path`、`httpOnly`、`domain`、`maxAge`") Map<String, Object> options) {
|
|
||||||
if (cookies != null) {
|
|
||||||
for (Map.Entry<String, String> entry : cookies.entrySet()) {
|
|
||||||
addCookie(module, entry.getKey(), entry.getValue(), options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<?> support() {
|
|
||||||
return ResponseModule.class;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.core.Ordered;
|
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
|
||||||
import org.springframework.web.multipart.MultipartResolver;
|
|
||||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
||||||
import org.ssssssss.magicapi.core.config.MagicAPIProperties;
|
|
||||||
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
|
|
||||||
import org.ssssssss.magicapi.core.servlet.MagicRequestContextHolder;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class MagicJavaEEServletConfiguration implements WebMvcConfigurer {
|
|
||||||
|
|
||||||
private final MagicAPIProperties properties;
|
|
||||||
|
|
||||||
private final ObjectProvider<MagicJavaEEWebRequestInterceptor> magicWebRequestInterceptorProvider;
|
|
||||||
|
|
||||||
|
|
||||||
public MagicJavaEEServletConfiguration(MagicAPIProperties properties, ObjectProvider<MagicJavaEEWebRequestInterceptor> magicWebRequestInterceptorProvider) {
|
|
||||||
this.properties = properties;
|
|
||||||
this.magicWebRequestInterceptorProvider = magicWebRequestInterceptorProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
private MagicJavaEECorsFilter magicCorsFilter = new MagicJavaEECorsFilter();
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MagicRequestContextHolder magicRequestContextHolder(MultipartResolver multipartResolver){
|
|
||||||
return new MagicJavaEERequestContextHolder(multipartResolver);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MagicJavaEEWebRequestInterceptor magicWebRequestInterceptor(AuthorizationInterceptor authorizationInterceptor){
|
|
||||||
return new MagicJavaEEWebRequestInterceptor(properties.isSupportCrossDomain() ? magicCorsFilter : null, authorizationInterceptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addInterceptors(InterceptorRegistry registry) {
|
|
||||||
registry.addInterceptor(magicWebRequestInterceptorProvider.getObject()).addPathPatterns("/**");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
|
|
||||||
resolvers.add(0, new MagicJavaEEHttpServletRequest.ArgumentsResolver());
|
|
||||||
resolvers.add(0, new MagicJavaEEHttpServletResponse.ArgumentsResolver());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MagicJavaEEResponseExtension magicJavaEEResponseExtension() {
|
|
||||||
return new MagicJavaEEResponseExtension();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnProperty(prefix = "magic-api", value = "support-cross-domain", havingValue = "true", matchIfMissing = true)
|
|
||||||
public FilterRegistrationBean<MagicJavaEECorsFilter> magicCorsFilterRegistrationBean() {
|
|
||||||
FilterRegistrationBean<MagicJavaEECorsFilter> registration = new FilterRegistrationBean<>(magicCorsFilter);
|
|
||||||
registration.addUrlPatterns("/*");
|
|
||||||
registration.setName("Magic Cors Filter");
|
|
||||||
registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
|
|
||||||
return registration;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
package org.ssssssss.magicapi.servlet.javaee;
|
|
||||||
|
|
||||||
import org.springframework.web.servlet.HandlerInterceptor;
|
|
||||||
import org.ssssssss.magicapi.core.config.MagicCorsFilter;
|
|
||||||
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
|
|
||||||
import org.ssssssss.magicapi.core.interceptor.MagicWebRequestInterceptor;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
public class MagicJavaEEWebRequestInterceptor extends MagicWebRequestInterceptor implements HandlerInterceptor {
|
|
||||||
|
|
||||||
|
|
||||||
public MagicJavaEEWebRequestInterceptor(MagicCorsFilter magicCorsFilter, AuthorizationInterceptor authorizationInterceptor) {
|
|
||||||
super(magicCorsFilter, authorizationInterceptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
||||||
super.handle(handler, new MagicJavaEEHttpServletRequest(request, null), new MagicJavaEEHttpServletResponse(response));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-parent</artifactId>
|
<artifactId>magic-api-parent</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-api-servlet</artifactId>
|
<artifactId>magic-api-servlet</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
@ -14,7 +14,6 @@
|
|||||||
<description>auto generate http api</description>
|
<description>auto generate http api</description>
|
||||||
<modules>
|
<modules>
|
||||||
<module>magic-api-servlet-jakarta</module>
|
<module>magic-api-servlet-jakarta</module>
|
||||||
<module>magic-api-servlet-javaee</module>
|
|
||||||
</modules>
|
</modules>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -22,4 +21,20 @@
|
|||||||
<artifactId>magic-api</artifactId>
|
<artifactId>magic-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>17</source>
|
||||||
|
<target>17</target>
|
||||||
|
<compilerArgs>
|
||||||
|
<arg>-parameters</arg>
|
||||||
|
</compilerArgs>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-parent</artifactId>
|
<artifactId>magic-api-parent</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>magic-editor</artifactId>
|
<artifactId>magic-editor</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
30
pom.xml
30
pom.xml
@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.ssssssss</groupId>
|
<groupId>org.ssssssss</groupId>
|
||||||
<artifactId>magic-api-parent</artifactId>
|
<artifactId>magic-api-parent</artifactId>
|
||||||
<version>2.1.1</version>
|
<version>3.0.0</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>magic-api-parent</name>
|
<name>magic-api-parent</name>
|
||||||
<description>auto generate http api</description>
|
<description>auto generate http api</description>
|
||||||
@ -29,7 +29,7 @@
|
|||||||
<developerConnection>scm:git:https://gitee.com/ssssssss-team/magic-api.git</developerConnection>
|
<developerConnection>scm:git:https://gitee.com/ssssssss-team/magic-api.git</developerConnection>
|
||||||
</scm>
|
</scm>
|
||||||
<properties>
|
<properties>
|
||||||
<spring-boot.version>2.4.5</spring-boot.version>
|
<spring-boot.version>3.3.0</spring-boot.version>
|
||||||
<magic-script.version>1.8.8</magic-script.version>
|
<magic-script.version>1.8.8</magic-script.version>
|
||||||
<commons-compress.version>1.21</commons-compress.version>
|
<commons-compress.version>1.21</commons-compress.version>
|
||||||
<commons-io.version>2.7</commons-io.version>
|
<commons-io.version>2.7</commons-io.version>
|
||||||
@ -38,10 +38,11 @@
|
|||||||
<jakarta.version>6.0.0</jakarta.version>
|
<jakarta.version>6.0.0</jakarta.version>
|
||||||
<fastjson.version>1.2.83</fastjson.version>
|
<fastjson.version>1.2.83</fastjson.version>
|
||||||
<spring-boot-starter-log4j.version>1.3.8.RELEASE</spring-boot-starter-log4j.version>
|
<spring-boot-starter-log4j.version>1.3.8.RELEASE</spring-boot-starter-log4j.version>
|
||||||
<java.version>1.8</java.version>
|
<java.version>17</java.version>
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<maven.compiler.parameters>true</maven.compiler.parameters>
|
||||||
</properties>
|
</properties>
|
||||||
<modules>
|
<modules>
|
||||||
<module>magic-api</module>
|
<module>magic-api</module>
|
||||||
@ -133,6 +134,17 @@
|
|||||||
</archive>
|
</archive>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>17</source>
|
||||||
|
<target>17</target>
|
||||||
|
<compilerArgs>
|
||||||
|
<arg>-parameters</arg>
|
||||||
|
</compilerArgs>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<profiles>
|
<profiles>
|
||||||
@ -142,10 +154,14 @@
|
|||||||
<plugins>
|
<plugins>
|
||||||
<!--Compiler-->
|
<!--Compiler-->
|
||||||
<plugin>
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>17</source>
|
||||||
<target>1.8</target>
|
<target>17</target>
|
||||||
|
<compilerArgs>
|
||||||
|
<arg>-parameters</arg>
|
||||||
|
</compilerArgs>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<!-- Source -->
|
<!-- Source -->
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user