更新readme
This commit is contained in:
parent
4704578954
commit
95497591e9
34
README.md
34
README.md
@ -22,7 +22,7 @@
|
|||||||
<th style="text-align: center">描述</th>
|
<th style="text-align: center">描述</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="4">后端</td>
|
<td rowspan = "4">后端</td>
|
||||||
<td>SpringBoot</td>
|
<td>SpringBoot</td>
|
||||||
<td>2.3.7-Release</td>
|
<td>2.3.7-Release</td>
|
||||||
<td>一个轻量级的IoC控制反转容器框架</td>
|
<td>一个轻量级的IoC控制反转容器框架</td>
|
||||||
@ -42,5 +42,37 @@
|
|||||||
<td>3.5.6</td>
|
<td>3.5.6</td>
|
||||||
<td>一款优秀的数据持久层框架</td>
|
<td>一款优秀的数据持久层框架</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan = "5">前端</td>
|
||||||
|
<td>Vue</td>
|
||||||
|
<td>3.2.31</td>
|
||||||
|
<td>构建用户界面的MVVM渐进式框架</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Vue-router</td>
|
||||||
|
<td>4.0.12</td>
|
||||||
|
<td>Vue的路由管理器</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Bootstrap</td>
|
||||||
|
<td>5.1.3</td>
|
||||||
|
<td>简介灵活的前端框架</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Axios</td>
|
||||||
|
<td>0.26.0</td>
|
||||||
|
<td>基于 promise 的网络请求库</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Element-Plus</td>
|
||||||
|
<td>2.0.2</td>
|
||||||
|
<td>饿了么出品的Vue3组件库</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>数据库</td>
|
||||||
|
<td>Sqlite</td>
|
||||||
|
<td>3.34.0</td>
|
||||||
|
<td>使用最广泛的关系型单文件数据库</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
package icu.mmmc.InventoryProMax.configuration;
|
package icu.mmmc.InventoryProMax.configuration;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.security.access.vote.RoleVoter;
|
import org.springframework.security.access.vote.RoleVoter;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户可用身份
|
||||||
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class UserRoles {
|
public class UserRoles {
|
||||||
|
public static final String ROOT = "ROOT";
|
||||||
|
public static final String INV_ADMIN = "INV_ADMIN";
|
||||||
|
public static final String SELL = "SELL";
|
||||||
|
public static final String MEMBER_ADMIN = "MEMBER_ADMIN";
|
||||||
public String rolePrefix;
|
public String rolePrefix;
|
||||||
public String roleRoot;
|
public String roleRoot;
|
||||||
public String[] roleInvAdmin;
|
public String[] roleInvAdmin;
|
||||||
@ -13,8 +19,8 @@ public class UserRoles {
|
|||||||
|
|
||||||
public UserRoles() {
|
public UserRoles() {
|
||||||
rolePrefix = new RoleVoter().getRolePrefix();
|
rolePrefix = new RoleVoter().getRolePrefix();
|
||||||
roleRoot = "ROOT";
|
roleRoot = ROOT;
|
||||||
roleInvAdmin = new String[]{"INV_ADMIN", roleRoot};
|
roleInvAdmin = new String[]{INV_ADMIN, ROOT};
|
||||||
roleSell = new String[]{"SELL", roleRoot};
|
roleSell = new String[]{SELL, ROOT};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,9 +50,9 @@ public class Demo {
|
|||||||
|
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@GetMapping(value = "/demo2")
|
@GetMapping(value = "/demo2")
|
||||||
@PreAuthorize("hasAnyRole(@userRoles.roleRoot)")
|
@PermitAll
|
||||||
public Cookie[] demo2(HttpServletRequest request) {
|
public String demo2(HttpServletRequest request) {
|
||||||
return request.getCookies();
|
return request.getRequestURI();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PermitAll
|
@PermitAll
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package icu.mmmc.InventoryProMax.controller;
|
package icu.mmmc.InventoryProMax.controller;
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
import javax.annotation.security.PermitAll;
|
import javax.annotation.security.PermitAll;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主页
|
* 主页
|
||||||
@ -15,10 +17,11 @@ public class IndexController {
|
|||||||
|
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@GetMapping(value = "/")
|
@GetMapping(value = "/")
|
||||||
public String userLogin(Model model, @RequestParam(value = "error", defaultValue = "") String error) {
|
public ModelAndView userLogin(@RequestParam(value = "error", defaultValue = "") String error) {
|
||||||
|
Map<String, String> model = new HashMap<>();
|
||||||
if (!error.isEmpty()) {
|
if (!error.isEmpty()) {
|
||||||
model.addAttribute("qwe", "fail");
|
model.put("fail", "true");
|
||||||
}
|
}
|
||||||
return "/userLogin.html";
|
return new ModelAndView("/userLogin.html", model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package icu.mmmc.InventoryProMax.filter;
|
package icu.mmmc.InventoryProMax.filter;
|
||||||
|
|
||||||
import icu.mmmc.InventoryProMax.security.AuthenticationManagerImpl;
|
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.security.authentication.AuthenticationManager;
|
||||||
import org.springframework.security.authentication.AuthenticationServiceException;
|
import org.springframework.security.authentication.AuthenticationServiceException;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@ -24,7 +24,7 @@ import java.io.IOException;
|
|||||||
@Component
|
@Component
|
||||||
public class AuthenticationProcessingFilterImpl extends AbstractAuthenticationProcessingFilter {
|
public class AuthenticationProcessingFilterImpl extends AbstractAuthenticationProcessingFilter {
|
||||||
|
|
||||||
public AuthenticationProcessingFilterImpl(AuthenticationManagerImpl authenticationManager, AuthenticationSuccessHandler authenticationSuccessHandler, AuthenticationFailureHandler authenticationFailureHandler) {
|
public AuthenticationProcessingFilterImpl(AuthenticationManager authenticationManager, AuthenticationSuccessHandler authenticationSuccessHandler, AuthenticationFailureHandler authenticationFailureHandler) {
|
||||||
super(new AntPathRequestMatcher("/login", HttpMethod.POST.name()));
|
super(new AntPathRequestMatcher("/login", HttpMethod.POST.name()));
|
||||||
this.setAuthenticationManager(authenticationManager);
|
this.setAuthenticationManager(authenticationManager);
|
||||||
this.setAuthenticationSuccessHandler(authenticationSuccessHandler);
|
this.setAuthenticationSuccessHandler(authenticationSuccessHandler);
|
||||||
|
@ -31,7 +31,7 @@ public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHa
|
|||||||
.signWith(SignatureAlgorithm.RS256, rsaUtils.getPrivateKey())
|
.signWith(SignatureAlgorithm.RS256, rsaUtils.getPrivateKey())
|
||||||
.compact();
|
.compact();
|
||||||
response.addCookie(new Cookie(HttpHeaders.AUTHORIZATION, token));
|
response.addCookie(new Cookie(HttpHeaders.AUTHORIZATION, token));
|
||||||
response.sendRedirect("/demo");
|
response.sendRedirect("/testAjax.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
21
src/main/java/icu/mmmc/InventoryProMax/utils/AjaxUtils.java
Normal file
21
src/main/java/icu/mmmc/InventoryProMax/utils/AjaxUtils.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package icu.mmmc.InventoryProMax.utils;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
public class AjaxUtils {
|
||||||
|
/**
|
||||||
|
* 是否是Ajax异步请求
|
||||||
|
*
|
||||||
|
* @param request 请求
|
||||||
|
*/
|
||||||
|
public static boolean isAjaxRequest(HttpServletRequest request) {
|
||||||
|
String accept = request.getHeader(HttpHeaders.ACCEPT);
|
||||||
|
if (accept != null && accept.contains("application/json")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String xRequestedWith = request.getHeader("X-Requested-With");
|
||||||
|
return xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package icu.mmmc.InventoryProMax.utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品状态
|
||||||
|
*/
|
||||||
|
public class ProductStatus {
|
||||||
|
/**
|
||||||
|
* 正常
|
||||||
|
*/
|
||||||
|
public static final int NORMAL = 0;
|
||||||
|
/**
|
||||||
|
* 售罄
|
||||||
|
*/
|
||||||
|
public static final int SOLD_OUT = 1;
|
||||||
|
/**
|
||||||
|
* 下架
|
||||||
|
*/
|
||||||
|
public static final int TAKE_DOWN = 2;
|
||||||
|
}
|
@ -34,5 +34,6 @@
|
|||||||
SELECT
|
SELECT
|
||||||
<include refid="productColumns"/>
|
<include refid="productColumns"/>
|
||||||
FROM t_products AS p
|
FROM t_products AS p
|
||||||
|
WHERE p.id = #{id}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
@ -51,6 +51,6 @@
|
|||||||
<select id="listUserRolesByUid" resultType="string">
|
<select id="listUserRolesByUid" resultType="string">
|
||||||
SELECT ur.role
|
SELECT ur.role
|
||||||
FROM t_user_roles AS ur
|
FROM t_user_roles AS ur
|
||||||
WHERE ui.uid = #{uid}
|
WHERE ur.uid = #{uid}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
627
src/main/resources/static/axios.js
Normal file
627
src/main/resources/static/axios.js
Normal file
@ -0,0 +1,627 @@
|
|||||||
|
/* axios v0.21.0 | (c) 2020 by Matt Zabriskie */ ! function(e, t) {
|
||||||
|
"object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define
|
||||||
|
.amd ? define([], t) : "object" == typeof exports ? exports.axios = t() : e.axios = t()
|
||||||
|
}(this, function() {
|
||||||
|
return function(e) {
|
||||||
|
function t(r) {
|
||||||
|
if (n[r]) return n[r].exports;
|
||||||
|
var o = n[r] = {
|
||||||
|
exports: {},
|
||||||
|
id: r,
|
||||||
|
loaded: !1
|
||||||
|
};
|
||||||
|
return e[r].call(o.exports, o, o.exports, t), o.loaded = !0, o.exports
|
||||||
|
}
|
||||||
|
var n = {};
|
||||||
|
return t.m = e, t.c = n, t.p = "", t(0)
|
||||||
|
}([function(e, t, n) {
|
||||||
|
e.exports = n(1)
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
var t = new i(e),
|
||||||
|
n = s(i.prototype.request, t);
|
||||||
|
return o.extend(n, i.prototype, t), o.extend(n, t), n
|
||||||
|
}
|
||||||
|
var o = n(2),
|
||||||
|
s = n(3),
|
||||||
|
i = n(4),
|
||||||
|
a = n(22),
|
||||||
|
u = n(10),
|
||||||
|
c = r(u);
|
||||||
|
c.Axios = i, c.create = function(e) {
|
||||||
|
return r(a(c.defaults, e))
|
||||||
|
}, c.Cancel = n(23), c.CancelToken = n(24), c.isCancel = n(9), c.all = function(e) {
|
||||||
|
return Promise.all(e)
|
||||||
|
}, c.spread = n(25), e.exports = c, e.exports.default = c
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
return "[object Array]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function o(e) {
|
||||||
|
return "undefined" == typeof e
|
||||||
|
}
|
||||||
|
|
||||||
|
function s(e) {
|
||||||
|
return null !== e && !o(e) && null !== e.constructor && !o(e.constructor) && "function" == typeof e.constructor.isBuffer &&
|
||||||
|
e.constructor.isBuffer(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function i(e) {
|
||||||
|
return "[object ArrayBuffer]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function a(e) {
|
||||||
|
return "undefined" != typeof FormData && e instanceof FormData
|
||||||
|
}
|
||||||
|
|
||||||
|
function u(e) {
|
||||||
|
var t;
|
||||||
|
return t = "undefined" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(e) : e && e.buffer && e.buffer instanceof ArrayBuffer
|
||||||
|
}
|
||||||
|
|
||||||
|
function c(e) {
|
||||||
|
return "string" == typeof e
|
||||||
|
}
|
||||||
|
|
||||||
|
function f(e) {
|
||||||
|
return "number" == typeof e
|
||||||
|
}
|
||||||
|
|
||||||
|
function p(e) {
|
||||||
|
return null !== e && "object" == typeof e
|
||||||
|
}
|
||||||
|
|
||||||
|
function d(e) {
|
||||||
|
if ("[object Object]" !== R.call(e)) return !1;
|
||||||
|
var t = Object.getPrototypeOf(e);
|
||||||
|
return null === t || t === Object.prototype
|
||||||
|
}
|
||||||
|
|
||||||
|
function l(e) {
|
||||||
|
return "[object Date]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function h(e) {
|
||||||
|
return "[object File]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function m(e) {
|
||||||
|
return "[object Blob]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function y(e) {
|
||||||
|
return "[object Function]" === R.call(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function g(e) {
|
||||||
|
return p(e) && y(e.pipe)
|
||||||
|
}
|
||||||
|
|
||||||
|
function v(e) {
|
||||||
|
return "undefined" != typeof URLSearchParams && e instanceof URLSearchParams
|
||||||
|
}
|
||||||
|
|
||||||
|
function x(e) {
|
||||||
|
return e.replace(/^\s*/, "").replace(/\s*$/, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
function w() {
|
||||||
|
return ("undefined" == typeof navigator || "ReactNative" !== navigator.product && "NativeScript" !== navigator.product &&
|
||||||
|
"NS" !== navigator.product) && ("undefined" != typeof window && "undefined" != typeof document)
|
||||||
|
}
|
||||||
|
|
||||||
|
function b(e, t) {
|
||||||
|
if (null !== e && "undefined" != typeof e)
|
||||||
|
if ("object" != typeof e && (e = [e]), r(e))
|
||||||
|
for (var n = 0, o = e.length; n < o; n++) t.call(null, e[n], n, e);
|
||||||
|
else
|
||||||
|
for (var s in e) Object.prototype.hasOwnProperty.call(e, s) && t.call(null, e[s], s, e)
|
||||||
|
}
|
||||||
|
|
||||||
|
function E() {
|
||||||
|
function e(e, n) {
|
||||||
|
d(t[n]) && d(e) ? t[n] = E(t[n], e) : d(e) ? t[n] = E({}, e) : r(e) ? t[n] = e.slice() : t[n] = e
|
||||||
|
}
|
||||||
|
for (var t = {}, n = 0, o = arguments.length; n < o; n++) b(arguments[n], e);
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function C(e, t, n) {
|
||||||
|
return b(t, function(t, r) {
|
||||||
|
n && "function" == typeof t ? e[r] = S(t, n) : e[r] = t
|
||||||
|
}), e
|
||||||
|
}
|
||||||
|
|
||||||
|
function j(e) {
|
||||||
|
return 65279 === e.charCodeAt(0) && (e = e.slice(1)), e
|
||||||
|
}
|
||||||
|
var S = n(3),
|
||||||
|
R = Object.prototype.toString;
|
||||||
|
e.exports = {
|
||||||
|
isArray: r,
|
||||||
|
isArrayBuffer: i,
|
||||||
|
isBuffer: s,
|
||||||
|
isFormData: a,
|
||||||
|
isArrayBufferView: u,
|
||||||
|
isString: c,
|
||||||
|
isNumber: f,
|
||||||
|
isObject: p,
|
||||||
|
isPlainObject: d,
|
||||||
|
isUndefined: o,
|
||||||
|
isDate: l,
|
||||||
|
isFile: h,
|
||||||
|
isBlob: m,
|
||||||
|
isFunction: y,
|
||||||
|
isStream: g,
|
||||||
|
isURLSearchParams: v,
|
||||||
|
isStandardBrowserEnv: w,
|
||||||
|
forEach: b,
|
||||||
|
merge: E,
|
||||||
|
extend: C,
|
||||||
|
trim: x,
|
||||||
|
stripBOM: j
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e, t) {
|
||||||
|
return function() {
|
||||||
|
for (var n = new Array(arguments.length), r = 0; r < n.length; r++) n[r] = arguments[r];
|
||||||
|
return e.apply(t, n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
this.defaults = e, this.interceptors = {
|
||||||
|
request: new i,
|
||||||
|
response: new i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var o = n(2),
|
||||||
|
s = n(5),
|
||||||
|
i = n(6),
|
||||||
|
a = n(7),
|
||||||
|
u = n(22);
|
||||||
|
r.prototype.request = function(e) {
|
||||||
|
"string" == typeof e ? (e = arguments[1] || {}, e.url = arguments[0]) : e = e || {}, e = u(this.defaults, e), e
|
||||||
|
.method ? e.method = e.method.toLowerCase() : this.defaults.method ? e.method = this.defaults.method.toLowerCase() :
|
||||||
|
e.method = "get";
|
||||||
|
var t = [a, void 0],
|
||||||
|
n = Promise.resolve(e);
|
||||||
|
for (this.interceptors.request.forEach(function(e) {
|
||||||
|
t.unshift(e.fulfilled, e.rejected)
|
||||||
|
}), this.interceptors.response.forEach(function(e) {
|
||||||
|
t.push(e.fulfilled, e.rejected)
|
||||||
|
}); t.length;) n = n.then(t.shift(), t.shift());
|
||||||
|
return n
|
||||||
|
}, r.prototype.getUri = function(e) {
|
||||||
|
return e = u(this.defaults, e), s(e.url, e.params, e.paramsSerializer).replace(/^\?/, "")
|
||||||
|
}, o.forEach(["delete", "get", "head", "options"], function(e) {
|
||||||
|
r.prototype[e] = function(t, n) {
|
||||||
|
return this.request(u(n || {}, {
|
||||||
|
method: e,
|
||||||
|
url: t,
|
||||||
|
data: (n || {}).data
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}), o.forEach(["post", "put", "patch"], function(e) {
|
||||||
|
r.prototype[e] = function(t, n, r) {
|
||||||
|
return this.request(u(r || {}, {
|
||||||
|
method: e,
|
||||||
|
url: t,
|
||||||
|
data: n
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}), e.exports = r
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
return encodeURIComponent(e).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g,
|
||||||
|
"+").replace(/%5B/gi, "[").replace(/%5D/gi, "]")
|
||||||
|
}
|
||||||
|
var o = n(2);
|
||||||
|
e.exports = function(e, t, n) {
|
||||||
|
if (!t) return e;
|
||||||
|
var s;
|
||||||
|
if (n) s = n(t);
|
||||||
|
else if (o.isURLSearchParams(t)) s = t.toString();
|
||||||
|
else {
|
||||||
|
var i = [];
|
||||||
|
o.forEach(t, function(e, t) {
|
||||||
|
null !== e && "undefined" != typeof e && (o.isArray(e) ? t += "[]" : e = [e], o.forEach(e, function(e) {
|
||||||
|
o.isDate(e) ? e = e.toISOString() : o.isObject(e) && (e = JSON.stringify(e)), i.push(r(t) + "=" + r(e))
|
||||||
|
}))
|
||||||
|
}), s = i.join("&")
|
||||||
|
}
|
||||||
|
if (s) {
|
||||||
|
var a = e.indexOf("#");
|
||||||
|
a !== -1 && (e = e.slice(0, a)), e += (e.indexOf("?") === -1 ? "?" : "&") + s
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r() {
|
||||||
|
this.handlers = []
|
||||||
|
}
|
||||||
|
var o = n(2);
|
||||||
|
r.prototype.use = function(e, t) {
|
||||||
|
return this.handlers.push({
|
||||||
|
fulfilled: e,
|
||||||
|
rejected: t
|
||||||
|
}), this.handlers.length - 1
|
||||||
|
}, r.prototype.eject = function(e) {
|
||||||
|
this.handlers[e] && (this.handlers[e] = null)
|
||||||
|
}, r.prototype.forEach = function(e) {
|
||||||
|
o.forEach(this.handlers, function(t) {
|
||||||
|
null !== t && e(t)
|
||||||
|
})
|
||||||
|
}, e.exports = r
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
e.cancelToken && e.cancelToken.throwIfRequested()
|
||||||
|
}
|
||||||
|
var o = n(2),
|
||||||
|
s = n(8),
|
||||||
|
i = n(9),
|
||||||
|
a = n(10);
|
||||||
|
e.exports = function(e) {
|
||||||
|
r(e), e.headers = e.headers || {}, e.data = s(e.data, e.headers, e.transformRequest), e.headers = o.merge(e.headers
|
||||||
|
.common || {}, e.headers[e.method] || {}, e.headers), o.forEach(["delete", "get", "head", "post", "put",
|
||||||
|
"patch", "common"
|
||||||
|
], function(t) {
|
||||||
|
delete e.headers[t]
|
||||||
|
});
|
||||||
|
var t = e.adapter || a.adapter;
|
||||||
|
return t(e).then(function(t) {
|
||||||
|
return r(e), t.data = s(t.data, t.headers, e.transformResponse), t
|
||||||
|
}, function(t) {
|
||||||
|
return i(t) || (r(e), t && t.response && (t.response.data = s(t.response.data, t.response.headers, e.transformResponse))),
|
||||||
|
Promise.reject(t)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2);
|
||||||
|
e.exports = function(e, t, n) {
|
||||||
|
return r.forEach(n, function(n) {
|
||||||
|
e = n(e, t)
|
||||||
|
}), e
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e) {
|
||||||
|
return !(!e || !e.__CANCEL__)
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e, t) {
|
||||||
|
!s.isUndefined(e) && s.isUndefined(e["Content-Type"]) && (e["Content-Type"] = t)
|
||||||
|
}
|
||||||
|
|
||||||
|
function o() {
|
||||||
|
var e;
|
||||||
|
return "undefined" != typeof XMLHttpRequest ? e = n(12) : "undefined" != typeof process && "[object process]" ===
|
||||||
|
Object.prototype.toString.call(process) && (e = n(12)), e
|
||||||
|
}
|
||||||
|
var s = n(2),
|
||||||
|
i = n(11),
|
||||||
|
a = {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded"
|
||||||
|
},
|
||||||
|
u = {
|
||||||
|
adapter: o(),
|
||||||
|
transformRequest: [function(e, t) {
|
||||||
|
return i(t, "Accept"), i(t, "Content-Type"), s.isFormData(e) || s.isArrayBuffer(e) || s.isBuffer(e) || s.isStream(
|
||||||
|
e) || s.isFile(e) || s.isBlob(e) ? e : s.isArrayBufferView(e) ? e.buffer : s.isURLSearchParams(e) ? (r(t,
|
||||||
|
"application/x-www-form-urlencoded;charset=utf-8"), e.toString()) : s.isObject(e) ? (r(t,
|
||||||
|
"application/json;charset=utf-8"), JSON.stringify(e)) : e
|
||||||
|
}],
|
||||||
|
transformResponse: [function(e) {
|
||||||
|
if ("string" == typeof e) try {
|
||||||
|
e = JSON.parse(e)
|
||||||
|
} catch (e) {}
|
||||||
|
return e
|
||||||
|
}],
|
||||||
|
timeout: 0,
|
||||||
|
xsrfCookieName: "XSRF-TOKEN",
|
||||||
|
xsrfHeaderName: "X-XSRF-TOKEN",
|
||||||
|
maxContentLength: -1,
|
||||||
|
maxBodyLength: -1,
|
||||||
|
validateStatus: function(e) {
|
||||||
|
return e >= 200 && e < 300
|
||||||
|
}
|
||||||
|
};
|
||||||
|
u.headers = {
|
||||||
|
common: {
|
||||||
|
Accept: "application/json, text/plain, */*"
|
||||||
|
}
|
||||||
|
}, s.forEach(["delete", "get", "head"], function(e) {
|
||||||
|
u.headers[e] = {}
|
||||||
|
}), s.forEach(["post", "put", "patch"], function(e) {
|
||||||
|
u.headers[e] = s.merge(a)
|
||||||
|
}), e.exports = u
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2);
|
||||||
|
e.exports = function(e, t) {
|
||||||
|
r.forEach(e, function(n, r) {
|
||||||
|
r !== t && r.toUpperCase() === t.toUpperCase() && (e[t] = n, delete e[r])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2),
|
||||||
|
o = n(13),
|
||||||
|
s = n(16),
|
||||||
|
i = n(5),
|
||||||
|
a = n(17),
|
||||||
|
u = n(20),
|
||||||
|
c = n(21),
|
||||||
|
f = n(14);
|
||||||
|
e.exports = function(e) {
|
||||||
|
return new Promise(function(t, n) {
|
||||||
|
var p = e.data,
|
||||||
|
d = e.headers;
|
||||||
|
r.isFormData(p) && delete d["Content-Type"];
|
||||||
|
var l = new XMLHttpRequest;
|
||||||
|
if (e.auth) {
|
||||||
|
var h = e.auth.username || "",
|
||||||
|
m = e.auth.password ? unescape(encodeURIComponent(e.auth.password)) : "";
|
||||||
|
d.Authorization = "Basic " + btoa(h + ":" + m)
|
||||||
|
}
|
||||||
|
var y = a(e.baseURL, e.url);
|
||||||
|
if (l.open(e.method.toUpperCase(), i(y, e.params, e.paramsSerializer), !0), l.timeout = e.timeout, l.onreadystatechange =
|
||||||
|
function() {
|
||||||
|
if (l && 4 === l.readyState && (0 !== l.status || l.responseURL && 0 === l.responseURL.indexOf("file:"))) {
|
||||||
|
var r = "getAllResponseHeaders" in l ? u(l.getAllResponseHeaders()) : null,
|
||||||
|
s = e.responseType && "text" !== e.responseType ? l.response : l.responseText,
|
||||||
|
i = {
|
||||||
|
data: s,
|
||||||
|
status: l.status,
|
||||||
|
statusText: l.statusText,
|
||||||
|
headers: r,
|
||||||
|
config: e,
|
||||||
|
request: l
|
||||||
|
};
|
||||||
|
o(t, n, i), l = null
|
||||||
|
}
|
||||||
|
}, l.onabort = function() {
|
||||||
|
l && (n(f("Request aborted", e, "ECONNABORTED", l)), l = null)
|
||||||
|
}, l.onerror = function() {
|
||||||
|
n(f("Network Error", e, null, l)), l = null
|
||||||
|
}, l.ontimeout = function() {
|
||||||
|
var t = "timeout of " + e.timeout + "ms exceeded";
|
||||||
|
e.timeoutErrorMessage && (t = e.timeoutErrorMessage), n(f(t, e, "ECONNABORTED", l)), l = null
|
||||||
|
}, r.isStandardBrowserEnv()) {
|
||||||
|
var g = (e.withCredentials || c(y)) && e.xsrfCookieName ? s.read(e.xsrfCookieName) : void 0;
|
||||||
|
g && (d[e.xsrfHeaderName] = g)
|
||||||
|
}
|
||||||
|
if ("setRequestHeader" in l && r.forEach(d, function(e, t) {
|
||||||
|
"undefined" == typeof p && "content-type" === t.toLowerCase() ? delete d[t] : l.setRequestHeader(t, e)
|
||||||
|
}), r.isUndefined(e.withCredentials) || (l.withCredentials = !!e.withCredentials), e.responseType) try {
|
||||||
|
l.responseType = e.responseType
|
||||||
|
} catch (t) {
|
||||||
|
if ("json" !== e.responseType) throw t
|
||||||
|
}
|
||||||
|
"function" == typeof e.onDownloadProgress && l.addEventListener("progress", e.onDownloadProgress),
|
||||||
|
"function" == typeof e.onUploadProgress && l.upload && l.upload.addEventListener("progress", e.onUploadProgress),
|
||||||
|
e.cancelToken && e.cancelToken.promise.then(function(e) {
|
||||||
|
l && (l.abort(), n(e), l = null)
|
||||||
|
}), p || (p = null), l.send(p)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(14);
|
||||||
|
e.exports = function(e, t, n) {
|
||||||
|
var o = n.config.validateStatus;
|
||||||
|
n.status && o && !o(n.status) ? t(r("Request failed with status code " + n.status, n.config, null, n.request, n)) :
|
||||||
|
e(n)
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(15);
|
||||||
|
e.exports = function(e, t, n, o, s) {
|
||||||
|
var i = new Error(e);
|
||||||
|
return r(i, t, n, o, s)
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e, t, n, r, o) {
|
||||||
|
return e.config = t, n && (e.code = n), e.request = r, e.response = o, e.isAxiosError = !0, e.toJSON = function() {
|
||||||
|
return {
|
||||||
|
message: this.message,
|
||||||
|
name: this.name,
|
||||||
|
description: this.description,
|
||||||
|
number: this.number,
|
||||||
|
fileName: this.fileName,
|
||||||
|
lineNumber: this.lineNumber,
|
||||||
|
columnNumber: this.columnNumber,
|
||||||
|
stack: this.stack,
|
||||||
|
config: this.config,
|
||||||
|
code: this.code
|
||||||
|
}
|
||||||
|
}, e
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2);
|
||||||
|
e.exports = r.isStandardBrowserEnv() ? function() {
|
||||||
|
return {
|
||||||
|
write: function(e, t, n, o, s, i) {
|
||||||
|
var a = [];
|
||||||
|
a.push(e + "=" + encodeURIComponent(t)), r.isNumber(n) && a.push("expires=" + new Date(n).toGMTString()), r.isString(
|
||||||
|
o) && a.push("path=" + o), r.isString(s) && a.push("domain=" + s), i === !0 && a.push("secure"), document.cookie =
|
||||||
|
a.join("; ")
|
||||||
|
},
|
||||||
|
read: function(e) {
|
||||||
|
var t = document.cookie.match(new RegExp("(^|;\\s*)(" + e + ")=([^;]*)"));
|
||||||
|
return t ? decodeURIComponent(t[3]) : null
|
||||||
|
},
|
||||||
|
remove: function(e) {
|
||||||
|
this.write(e, "", Date.now() - 864e5)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}() : function() {
|
||||||
|
return {
|
||||||
|
write: function() {},
|
||||||
|
read: function() {
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
remove: function() {}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(18),
|
||||||
|
o = n(19);
|
||||||
|
e.exports = function(e, t) {
|
||||||
|
return e && !r(t) ? o(e, t) : t
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e) {
|
||||||
|
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e, t) {
|
||||||
|
return t ? e.replace(/\/+$/, "") + "/" + t.replace(/^\/+/, "") : e
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2),
|
||||||
|
o = ["age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host",
|
||||||
|
"if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization",
|
||||||
|
"referer", "retry-after", "user-agent"
|
||||||
|
];
|
||||||
|
e.exports = function(e) {
|
||||||
|
var t, n, s, i = {};
|
||||||
|
return e ? (r.forEach(e.split("\n"), function(e) {
|
||||||
|
if (s = e.indexOf(":"), t = r.trim(e.substr(0, s)).toLowerCase(), n = r.trim(e.substr(s + 1)), t) {
|
||||||
|
if (i[t] && o.indexOf(t) >= 0) return;
|
||||||
|
"set-cookie" === t ? i[t] = (i[t] ? i[t] : []).concat([n]) : i[t] = i[t] ? i[t] + ", " + n : n
|
||||||
|
}
|
||||||
|
}), i) : i
|
||||||
|
}
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2);
|
||||||
|
e.exports = r.isStandardBrowserEnv() ? function() {
|
||||||
|
function e(e) {
|
||||||
|
var t = e;
|
||||||
|
return n && (o.setAttribute("href", t), t = o.href), o.setAttribute("href", t), {
|
||||||
|
href: o.href,
|
||||||
|
protocol: o.protocol ? o.protocol.replace(/:$/, "") : "",
|
||||||
|
host: o.host,
|
||||||
|
search: o.search ? o.search.replace(/^\?/, "") : "",
|
||||||
|
hash: o.hash ? o.hash.replace(/^#/, "") : "",
|
||||||
|
hostname: o.hostname,
|
||||||
|
port: o.port,
|
||||||
|
pathname: "/" === o.pathname.charAt(0) ? o.pathname : "/" + o.pathname
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var t, n = /(msie|trident)/i.test(navigator.userAgent),
|
||||||
|
o = document.createElement("a");
|
||||||
|
return t = e(window.location.href),
|
||||||
|
function(n) {
|
||||||
|
var o = r.isString(n) ? e(n) : n;
|
||||||
|
return o.protocol === t.protocol && o.host === t.host
|
||||||
|
}
|
||||||
|
}() : function() {
|
||||||
|
return function() {
|
||||||
|
return !0
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
var r = n(2);
|
||||||
|
e.exports = function(e, t) {
|
||||||
|
function n(e, t) {
|
||||||
|
return r.isPlainObject(e) && r.isPlainObject(t) ? r.merge(e, t) : r.isPlainObject(t) ? r.merge({}, t) : r.isArray(
|
||||||
|
t) ? t.slice() : t
|
||||||
|
}
|
||||||
|
|
||||||
|
function o(o) {
|
||||||
|
r.isUndefined(t[o]) ? r.isUndefined(e[o]) || (s[o] = n(void 0, e[o])) : s[o] = n(e[o], t[o])
|
||||||
|
}
|
||||||
|
t = t || {};
|
||||||
|
var s = {},
|
||||||
|
i = ["url", "method", "data"],
|
||||||
|
a = ["headers", "auth", "proxy", "params"],
|
||||||
|
u = ["baseURL", "transformRequest", "transformResponse", "paramsSerializer", "timeout", "timeoutMessage",
|
||||||
|
"withCredentials", "adapter", "responseType", "xsrfCookieName", "xsrfHeaderName", "onUploadProgress",
|
||||||
|
"onDownloadProgress", "decompress", "maxContentLength", "maxBodyLength", "maxRedirects", "transport",
|
||||||
|
"httpAgent", "httpsAgent", "cancelToken", "socketPath", "responseEncoding"
|
||||||
|
],
|
||||||
|
c = ["validateStatus"];
|
||||||
|
r.forEach(i, function(e) {
|
||||||
|
r.isUndefined(t[e]) || (s[e] = n(void 0, t[e]))
|
||||||
|
}), r.forEach(a, o), r.forEach(u, function(o) {
|
||||||
|
r.isUndefined(t[o]) ? r.isUndefined(e[o]) || (s[o] = n(void 0, e[o])) : s[o] = n(void 0, t[o])
|
||||||
|
}), r.forEach(c, function(r) {
|
||||||
|
r in t ? s[r] = n(e[r], t[r]) : r in e && (s[r] = n(void 0, e[r]))
|
||||||
|
});
|
||||||
|
var f = i.concat(a).concat(u).concat(c),
|
||||||
|
p = Object.keys(e).concat(Object.keys(t)).filter(function(e) {
|
||||||
|
return f.indexOf(e) === -1
|
||||||
|
});
|
||||||
|
return r.forEach(p, o), s
|
||||||
|
}
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function n(e) {
|
||||||
|
this.message = e
|
||||||
|
}
|
||||||
|
n.prototype.toString = function() {
|
||||||
|
return "Cancel" + (this.message ? ": " + this.message : "")
|
||||||
|
}, n.prototype.__CANCEL__ = !0, e.exports = n
|
||||||
|
}, function(e, t, n) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
function r(e) {
|
||||||
|
if ("function" != typeof e) throw new TypeError("executor must be a function.");
|
||||||
|
var t;
|
||||||
|
this.promise = new Promise(function(e) {
|
||||||
|
t = e
|
||||||
|
});
|
||||||
|
var n = this;
|
||||||
|
e(function(e) {
|
||||||
|
n.reason || (n.reason = new o(e), t(n.reason))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var o = n(23);
|
||||||
|
r.prototype.throwIfRequested = function() {
|
||||||
|
if (this.reason) throw this.reason
|
||||||
|
}, r.source = function() {
|
||||||
|
var e, t = new r(function(t) {
|
||||||
|
e = t
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
token: t,
|
||||||
|
cancel: e
|
||||||
|
}
|
||||||
|
}, e.exports = r
|
||||||
|
}, function(e, t) {
|
||||||
|
"use strict";
|
||||||
|
e.exports = function(e) {
|
||||||
|
return function(t) {
|
||||||
|
return e.apply(null, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
});
|
||||||
|
//# sourceMappingURL=axios.min.map
|
27
src/main/resources/static/testAjax.html
Normal file
27
src/main/resources/static/testAjax.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>testAjax</title>
|
||||||
|
<script src="axios.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<button id="btn">ajax</button>
|
||||||
|
<div id="d">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.getElementById("btn").onclick = function () {
|
||||||
|
axios
|
||||||
|
.post('/demo2')
|
||||||
|
.then(response => (
|
||||||
|
document.getElementById("d").innerText = response.data
|
||||||
|
))
|
||||||
|
.catch(function (error) { // 请求失败处理
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</html>
|
@ -7,7 +7,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<form method="post" action="/login">
|
<form method="post" action="/login">
|
||||||
<input type="text" name="username"><br>
|
<input type="text" name="username"><br>
|
||||||
<input type="password" name="password"><span th:text="${qwe}"></span><br>
|
<input type="password" name="password"><span th:text="${fail}"></span><br>
|
||||||
<input type="submit" value="login">
|
<input type="submit" value="login">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user