适配 springboot3

This commit is contained in:
click33
2023-01-05 19:20:21 +08:00
parent d09366602a
commit 1feca73e2a
134 changed files with 3238 additions and 974 deletions

View File

@@ -0,0 +1,12 @@
target/
node_modules/
bin/
.settings/
unpackage/
.classpath
.project
.factorypath
.idea/

View File

@@ -0,0 +1,35 @@
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-starter</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<packaging>jar</packaging>
<name>sa-token-jakarta-servlet</name>
<artifactId>sa-token-jakarta-servlet</artifactId>
<description>sa-token authentication by Jakarta Servlet API</description>
<dependencies>
<!-- sa-token-core -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-core</artifactId>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,17 @@
package cn.dev33.satoken.servlet.error;
/**
* 定义 sa-token-servlet 所有异常细分状态码
*
* @author kong
* @since: 2022-10-30
*/
public interface SaServletErrorCode {
/** 转发失败 */
public static final int CODE_20001 = 20001;
/** 重定向失败 */
public static final int CODE_20002 = 20002;
}

View File

@@ -0,0 +1,117 @@
package cn.dev33.satoken.servlet.model;
import java.io.IOException;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.servlet.error.SaServletErrorCode;
import cn.dev33.satoken.util.SaFoxUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* Request for Jakarta Servlet
* @author kong
*
*/
public class SaRequestForServlet implements SaRequest {
/**
* 底层Request对象
*/
protected HttpServletRequest request;
/**
* 实例化
* @param request request对象
*/
public SaRequestForServlet(HttpServletRequest request) {
this.request = request;
}
/**
* 获取底层源对象
*/
@Override
public Object getSource() {
return request;
}
/**
* 在 [请求体] 里获取一个值
*/
@Override
public String getParam(String name) {
return request.getParameter(name);
}
/**
* 在 [请求头] 里获取一个值
*/
@Override
public String getHeader(String name) {
return request.getHeader(name);
}
/**
* 在 [Cookie作用域] 里获取一个值
*/
@Override
public String getCookieValue(String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie != null && name.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
/**
* 返回当前请求path (不包括上下文名称)
*/
@Override
public String getRequestPath() {
return request.getServletPath();
}
/**
* 返回当前请求的urlhttp://xxx.com/test
* @return see note
*/
public String getUrl() {
String currDomain = SaManager.getConfig().getCurrDomain();
if(SaFoxUtil.isEmpty(currDomain) == false) {
return currDomain + this.getRequestPath();
}
return request.getRequestURL().toString();
}
/**
* 返回当前请求的类型
*/
@Override
public String getMethod() {
return request.getMethod();
}
/**
* 转发请求
*/
@Override
public Object forward(String path) {
try {
HttpServletResponse response = (HttpServletResponse)SaManager.getSaTokenContextOrSecond().getResponse().getSource();
request.getRequestDispatcher(path).forward(request, response);
return null;
} catch (ServletException | IOException e) {
throw new SaTokenException(e).setCode(SaServletErrorCode.CODE_20001);
}
}
}

View File

@@ -0,0 +1,79 @@
package cn.dev33.satoken.servlet.model;
import cn.dev33.satoken.context.model.SaResponse;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.servlet.error.SaServletErrorCode;
import jakarta.servlet.http.HttpServletResponse;
/**
* Response for Jakarta Servlet
* @author kong
*
*/
public class SaResponseForServlet implements SaResponse {
/**
* 底层Request对象
*/
protected HttpServletResponse response;
/**
* 实例化
* @param response response对象
*/
public SaResponseForServlet(HttpServletResponse response) {
this.response = response;
}
/**
* 获取底层源对象
*/
@Override
public Object getSource() {
return response;
}
/**
* 设置响应状态码
*/
@Override
public SaResponse setStatus(int sc) {
response.setStatus(sc);
return this;
}
/**
* 在响应头里写入一个值
*/
@Override
public SaResponse setHeader(String name, String value) {
response.setHeader(name, value);
return this;
}
/**
* 在响应头里添加一个值
* @param name 名字
* @param value 值
* @return 对象自身
*/
public SaResponse addHeader(String name, String value) {
response.addHeader(name, value);
return this;
}
/**
* 重定向
*/
@Override
public Object redirect(String url) {
try {
response.sendRedirect(url);
} catch (Exception e) {
throw new SaTokenException(e).setCode(SaServletErrorCode.CODE_20002);
}
return null;
}
}

View File

@@ -0,0 +1,60 @@
package cn.dev33.satoken.servlet.model;
import cn.dev33.satoken.context.model.SaStorage;
import jakarta.servlet.http.HttpServletRequest;
/**
* Storage for Jakarta Servlet
* @author kong
*
*/
public class SaStorageForServlet implements SaStorage {
/**
* 底层Request对象
*/
protected HttpServletRequest request;
/**
* 实例化
* @param request request对象
*/
public SaStorageForServlet(HttpServletRequest request) {
this.request = request;
}
/**
* 获取底层源对象
*/
@Override
public Object getSource() {
return request;
}
/**
* 在 [Request作用域] 里写入一个值
*/
@Override
public SaStorageForServlet set(String key, Object value) {
request.setAttribute(key, value);
return this;
}
/**
* 在 [Request作用域] 里获取一个值
*/
@Override
public Object get(String key) {
return request.getAttribute(key);
}
/**
* 在 [Request作用域] 里删除一个值
*/
@Override
public SaStorageForServlet delete(String key) {
request.removeAttribute(key);
return this;
}
}

View File

@@ -0,0 +1,4 @@
/**
* Sa-Token对接ServletAPI容器所需要的实现类接口包
*/
package cn.dev33.satoken.servlet;