完善登录功能
This commit is contained in:
parent
bf5a547efb
commit
efd4f19fab
|
|
@ -47,6 +47,13 @@
|
||||||
<artifactId>spring-cloud-starter-gateway</artifactId>
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
<version>4.0.0</version>
|
<version>4.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||||
|
<version>${spring-cloud-alibaba.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>org.springframework.security</groupId>-->
|
<!-- <groupId>org.springframework.security</groupId>-->
|
||||||
<!-- <artifactId>spring-security-config</artifactId>-->
|
<!-- <artifactId>spring-security-config</artifactId>-->
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,10 @@ public class TokenFilter implements GlobalFilter, Ordered {
|
||||||
System.out.println("Token:"+token);
|
System.out.println("Token:"+token);
|
||||||
String url = exchange.getRequest().getURI().getPath();
|
String url = exchange.getRequest().getURI().getPath();
|
||||||
System.out.println("intercept " + url);
|
System.out.println("intercept " + url);
|
||||||
|
if(url.equals("/api/oms-api/login")){
|
||||||
|
// 登录页面 放行
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
// TODO: 统一鉴权处理
|
// TODO: 统一鉴权处理
|
||||||
if(!StringUtils.hasText(token)){
|
if(!StringUtils.hasText(token)){
|
||||||
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
|
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,10 @@ public class HomeController {
|
||||||
private RedisTemplate<String,String> redisTemplate;
|
private RedisTemplate<String,String> redisTemplate;
|
||||||
@Resource
|
@Resource
|
||||||
private EchoService echoService;
|
private EchoService echoService;
|
||||||
|
@GetMapping("/")
|
||||||
|
public String home(){
|
||||||
|
return "{'code':0,'msg':'请通过api访问'}";
|
||||||
|
}
|
||||||
@GetMapping(value = "/echo-rest")
|
@GetMapping(value = "/echo-rest")
|
||||||
public String rest() {
|
public String rest() {
|
||||||
return restTemplate.getForObject("http://tao-oms/test/na", String.class);
|
return restTemplate.getForObject("http://tao-oms/test/na", String.class);
|
||||||
|
|
@ -28,8 +31,4 @@ public class HomeController {
|
||||||
return echoService.echo();
|
return echoService.echo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(value = "/home")
|
|
||||||
public String home(){
|
|
||||||
return "home";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@ import com.qihang.oms.api.service.SysLoginService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class LoginController {
|
public class LoginController {
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -17,12 +20,18 @@ public class LoginController {
|
||||||
private ISysUserService userService;
|
private ISysUserService userService;
|
||||||
@PostMapping(value = "/login")
|
@PostMapping(value = "/login")
|
||||||
public AjaxResult login(@RequestBody LoginBody loginBody){
|
public AjaxResult login(@RequestBody LoginBody loginBody){
|
||||||
AjaxResult ajax = AjaxResult.success();
|
// AjaxResult ajax =
|
||||||
// SysUser user = userService.selectUserByUserName(loginBody.getUsername());
|
// SysUser user = userService.selectUserByUserName(loginBody.getUsername());
|
||||||
// 生成令牌
|
// 生成令牌
|
||||||
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
||||||
loginBody.getUuid());
|
loginBody.getUuid());
|
||||||
ajax.put(Constants.TOKEN, token);
|
// ajax.put(Constants.TOKEN, token);
|
||||||
return ajax;
|
Map<String, String> map = new HashMap<>();
|
||||||
|
map.put("accessToken", token);
|
||||||
|
map.put("tokenType","Bearer");
|
||||||
|
return AjaxResult.success(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//logout
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.qihang.oms.api.controller;
|
||||||
|
|
||||||
|
import com.qihang.oms.api.common.AjaxResult;
|
||||||
|
import com.qihang.oms.api.domain.vo.MenusDetailVo;
|
||||||
|
import com.qihang.oms.api.domain.vo.MenusVo;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequestMapping("/menus")
|
||||||
|
@RestController
|
||||||
|
public class MenusController {
|
||||||
|
|
||||||
|
@GetMapping(value = "/routes")
|
||||||
|
public AjaxResult list() {
|
||||||
|
List<MenusVo> vo = new ArrayList<>();
|
||||||
|
MenusVo m1 = new MenusVo();
|
||||||
|
m1.setPath("/system");
|
||||||
|
m1.setComponent("Layout");
|
||||||
|
m1.setRedirect("/system/user");
|
||||||
|
m1.setName("/system");
|
||||||
|
MenusDetailVo meta1 = new MenusDetailVo();
|
||||||
|
meta1.setTitle("系统管理");
|
||||||
|
meta1.setIcon("system");
|
||||||
|
meta1.setHidden(false);
|
||||||
|
meta1.setRoles(new String[]{"ADMIN", "ADMIN6"});
|
||||||
|
m1.setMeta(meta1);
|
||||||
|
|
||||||
|
List<MenusVo> m1Ch = new ArrayList<>();
|
||||||
|
MenusVo m1ch1 = new MenusVo();
|
||||||
|
m1ch1.setPath("/user");
|
||||||
|
m1ch1.setComponent("system/user/index");
|
||||||
|
m1ch1.setName("User");
|
||||||
|
MenusDetailVo meta11 = new MenusDetailVo();
|
||||||
|
meta11.setTitle("用户管理");
|
||||||
|
meta11.setIcon("user");
|
||||||
|
meta11.setHidden(false);
|
||||||
|
meta11.setRoles(new String[]{"ADMIN", "GUEST"});
|
||||||
|
meta11.setKeepAlive(true);
|
||||||
|
m1ch1.setMeta(meta11);
|
||||||
|
m1Ch.add(m1ch1);
|
||||||
|
m1.setChildren(m1Ch);
|
||||||
|
vo.add(m1);
|
||||||
|
return AjaxResult.success(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.qihang.oms.api.controller;
|
||||||
|
|
||||||
|
import com.qihang.oms.api.common.AjaxResult;
|
||||||
|
import com.qihang.oms.api.domain.vo.UserInfoVo;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequestMapping("/users")
|
||||||
|
@RestController
|
||||||
|
public class UsersController {
|
||||||
|
|
||||||
|
@GetMapping(value = "/me")
|
||||||
|
public AjaxResult me() {
|
||||||
|
UserInfoVo vo = new UserInfoVo();
|
||||||
|
vo.setUserId(2);
|
||||||
|
vo.setUsername("admin");
|
||||||
|
vo.setNickname("系统管理员");
|
||||||
|
vo.setAvatar("https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif");
|
||||||
|
vo.setRoles(new String[]{"ADMIN"});
|
||||||
|
List<String> perms = new ArrayList<>();
|
||||||
|
perms.add("sys:menu:delete");
|
||||||
|
perms.add("sys:dept:edit");
|
||||||
|
perms.add("sys:dict_type:add");
|
||||||
|
perms.add("sys:dict:edit");
|
||||||
|
perms.add("sys:dict:delete");
|
||||||
|
perms.add("sys:dict_type:edit");
|
||||||
|
perms.add("sys:menu:add");
|
||||||
|
perms.add("sys:user:add");
|
||||||
|
perms.add("sys:role:edit");
|
||||||
|
perms.add("sys:dept:delete");
|
||||||
|
perms.add("sys:user:password_reset");
|
||||||
|
perms.add("sys:user:edit");
|
||||||
|
perms.add("sys:user:delete");
|
||||||
|
perms.add("sys:dept:add");
|
||||||
|
perms.add("sys:role:delete");
|
||||||
|
perms.add("sys:dict_type:delete");
|
||||||
|
perms.add("sys:menu:edit");
|
||||||
|
perms.add("sys:dict:add");
|
||||||
|
perms.add("sys:role:add");
|
||||||
|
vo.setPerms(perms);
|
||||||
|
return AjaxResult.success(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.qihang.oms.api.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MenusDetailVo {
|
||||||
|
private String title;
|
||||||
|
private String icon;
|
||||||
|
private Boolean hidden;
|
||||||
|
private String[] roles;
|
||||||
|
private Boolean keepAlive;
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIcon() {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIcon(String icon) {
|
||||||
|
this.icon = icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getHidden() {
|
||||||
|
return hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHidden(Boolean hidden) {
|
||||||
|
this.hidden = hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(String[] roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getKeepAlive() {
|
||||||
|
return keepAlive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeepAlive(Boolean keepAlive) {
|
||||||
|
this.keepAlive = keepAlive;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.qihang.oms.api.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MenusVo {
|
||||||
|
private String path;
|
||||||
|
private String component;
|
||||||
|
private String redirect;
|
||||||
|
private String name;
|
||||||
|
private MenusDetailVo meta;
|
||||||
|
private List<MenusVo> children;
|
||||||
|
|
||||||
|
public String getPath() {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPath(String path) {
|
||||||
|
this.path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getComponent() {
|
||||||
|
return component;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComponent(String component) {
|
||||||
|
this.component = component;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRedirect() {
|
||||||
|
return redirect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRedirect(String redirect) {
|
||||||
|
this.redirect = redirect;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MenusDetailVo getMeta() {
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeta(MenusDetailVo meta) {
|
||||||
|
this.meta = meta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MenusVo> getChildren() {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChildren(List<MenusVo> children) {
|
||||||
|
this.children = children;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.qihang.oms.api.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserInfoVo {
|
||||||
|
private Integer userId;
|
||||||
|
private String username;
|
||||||
|
private String nickname;
|
||||||
|
private String avatar;
|
||||||
|
private String[] roles;
|
||||||
|
private List<String> perms;
|
||||||
|
|
||||||
|
public Integer getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Integer userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(String[] roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getPerms() {
|
||||||
|
return perms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPerms(List<String> perms) {
|
||||||
|
this.perms = perms;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -45,8 +45,8 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
|
||||||
{
|
{
|
||||||
// String token = exchange.getRequest().getHeaders().getFirst(TOKEN_HEADER);
|
// String token = exchange.getRequest().getHeaders().getFirst(TOKEN_HEADER);
|
||||||
String token = request.getHeader("Authorization");
|
String token = request.getHeader("Authorization");
|
||||||
|
String url =request.getRequestURI();
|
||||||
log.info("intercept " + request.getRequestURI());
|
log.info("intercept " + url);
|
||||||
log.info("token: " + token);
|
log.info("token: " + token);
|
||||||
if(request.getRequestURI().equals("/login")){
|
if(request.getRequestURI().equals("/login")){
|
||||||
// 登录页面,放行
|
// 登录页面,放行
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class HomeController {
|
public class HomeController {
|
||||||
@GetMapping("/test/22")
|
@GetMapping("/")
|
||||||
public String home(){
|
public String home(){
|
||||||
return "hello world";
|
return "{'code':0,'msg':'请通过api访问'}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Value(value = "${zhijian.name:1}")
|
@Value(value = "${zhijian.name:1}")
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ export function loginApi(data: LoginData): AxiosPromise<LoginResult> {
|
||||||
formData.append("captchaKey", data.captchaKey || "");
|
formData.append("captchaKey", data.captchaKey || "");
|
||||||
formData.append("captchaCode", data.captchaCode || "");
|
formData.append("captchaCode", data.captchaCode || "");
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/auth/login",
|
url: "/api/oms-api/login",
|
||||||
method: "post",
|
method: "post",
|
||||||
data: formData,
|
data: formData,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "multipart/form-data",
|
// "Content-Type": "multipart/form-data",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -29,7 +29,7 @@ export function loginApi(data: LoginData): AxiosPromise<LoginResult> {
|
||||||
*/
|
*/
|
||||||
export function logoutApi() {
|
export function logoutApi() {
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/auth/logout",
|
url: "/api/oms-api/logout",
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { MenuQuery, MenuVO, MenuForm } from "./types";
|
||||||
*/
|
*/
|
||||||
export function listRoutes() {
|
export function listRoutes() {
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/menus/routes",
|
url: "/api/oms-api/menus/routes",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { UserForm, UserInfo, UserPageVO, UserQuery } from "./types";
|
||||||
*/
|
*/
|
||||||
export function getUserInfoApi(): AxiosPromise<UserInfo> {
|
export function getUserInfoApi(): AxiosPromise<UserInfo> {
|
||||||
return request({
|
return request({
|
||||||
url: "/api/v1/users/me",
|
url: "/api/oms-api/users/me",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ service.interceptors.request.use(
|
||||||
service.interceptors.response.use(
|
service.interceptors.response.use(
|
||||||
(response: AxiosResponse) => {
|
(response: AxiosResponse) => {
|
||||||
const { code, msg } = response.data;
|
const { code, msg } = response.data;
|
||||||
if (code === "00000") {
|
if (code === "200" || code === 200) {
|
||||||
return response.data;
|
return response.data;
|
||||||
}
|
}
|
||||||
// 响应数据为二进制流处理(Excel导出)
|
// 响应数据为二进制流处理(Excel导出)
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@
|
||||||
v-show="useAppStore().device == 'desktop'"
|
v-show="useAppStore().device == 'desktop'"
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
Copyright © 2021 - 2024 youlai.tech All Rights Reserved. 启航电商
|
Copyright © 2021 - 2024 qihangec.tech All Rights Reserved. 启航电商
|
||||||
版权所有
|
版权所有
|
||||||
</p>
|
</p>
|
||||||
<p>皖ICP备20006496号-3</p>
|
<p>皖ICP备20006496号-3</p>
|
||||||
|
|
@ -261,6 +261,7 @@ function handleLogin() {
|
||||||
userStore
|
userStore
|
||||||
.login(loginData.value)
|
.login(loginData.value)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
console.log("登录成功")
|
||||||
const query: LocationQuery = route.query;
|
const query: LocationQuery = route.query;
|
||||||
|
|
||||||
const redirect = (query.redirect as LocationQueryValue) ?? "/";
|
const redirect = (query.redirect as LocationQueryValue) ?? "/";
|
||||||
|
|
@ -277,9 +278,10 @@ function handleLogin() {
|
||||||
|
|
||||||
router.push({ path: redirect, query: otherQueryParams });
|
router.push({ path: redirect, query: otherQueryParams });
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch((res) => {
|
||||||
|
console.log("登录失败",res)
|
||||||
// 验证失败,重新生成验证码
|
// 验证失败,重新生成验证码
|
||||||
getCaptcha();
|
// getCaptcha();
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue