完善登录功能

This commit is contained in:
启航 2024-01-25 20:31:16 +08:00
parent bf5a547efb
commit efd4f19fab
16 changed files with 311 additions and 23 deletions

View File

@ -47,7 +47,14 @@
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway</artifactId>
<version>4.0.0</version> <version>4.0.0</version>
</dependency> </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>-->
<!-- <groupId>org.springframework.security</groupId>--> <!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-config</artifactId>--> <!-- <artifactId>spring-security-config</artifactId>-->
<!-- </dependency>--> <!-- </dependency>-->

View File

@ -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);

View File

@ -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";
}
} }

View File

@ -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
} }

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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")){
// 登录页面放行 // 登录页面放行

View File

@ -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}")

View File

@ -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",
}); });
} }

View File

@ -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",
}); });
} }

View File

@ -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",
}); });
} }

View File

@ -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导出)

View File

@ -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;