diff --git a/core/security/src/main/java/com/qihang/security/JwtAuthenticationTokenFilter.java b/core/security/src/main/java/com/qihang/security/JwtAuthenticationTokenFilter.java index 34be9512..c9fad827 100644 --- a/core/security/src/main/java/com/qihang/security/JwtAuthenticationTokenFilter.java +++ b/core/security/src/main/java/com/qihang/security/JwtAuthenticationTokenFilter.java @@ -45,8 +45,8 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter String token = request.getHeader("Authorization"); String url =request.getRequestURI(); // log.info("intercept " + url); -// log.info("token: " + token); - if(request.getRequestURI().equals("/login") || request.getRequestURI().equals("/getInfo") || request.getRequestURI().equals("/logout")){ +// log.info("token: " + token); || request.getRequestURI().equals("/getInfo") || request.getRequestURI().equals("/logout") + if(request.getRequestURI().equals("/login") ){ // 登录页面,放行 chain.doFilter(request, response); return; diff --git a/core/security/src/main/java/com/qihang/security/vo/MetaVo.java b/core/security/src/main/java/com/qihang/security/vo/MetaVo.java new file mode 100644 index 00000000..a95d4a81 --- /dev/null +++ b/core/security/src/main/java/com/qihang/security/vo/MetaVo.java @@ -0,0 +1,107 @@ +package com.qihang.security.vo; + + +import com.qihang.common.utils.StringUtils; + +/** + * 路由显示信息 + * + * @author qihang + */ +public class MetaVo +{ + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } + } + + public boolean isNoCache() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + 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 String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/core/security/src/main/java/com/qihang/security/vo/RouterVo.java b/core/security/src/main/java/com/qihang/security/vo/RouterVo.java new file mode 100644 index 00000000..e0a72d10 --- /dev/null +++ b/core/security/src/main/java/com/qihang/security/vo/RouterVo.java @@ -0,0 +1,147 @@ +package com.qihang.security.vo; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author qihang + */ +//@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 路由参数:如 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/sys-api/src/main/java/com/qihang/sys/api/controller/SysLoginController.java b/sys-api/src/main/java/com/qihang/sys/api/controller/SysLoginController.java index d4e3ee7f..f4eebc91 100644 --- a/sys-api/src/main/java/com/qihang/sys/api/controller/SysLoginController.java +++ b/sys-api/src/main/java/com/qihang/sys/api/controller/SysLoginController.java @@ -86,11 +86,11 @@ public class SysLoginController * * @return 路由信息 */ -// @GetMapping("getRouters") -// public AjaxResult getRouters() -// { -// Long userId = SecurityUtils.getUserId(); -// List menus = menuService.selectMenuTreeByUserId(userId); -// return AjaxResult.success(menuService.buildMenus(menus)); -// } + @GetMapping("getRouters") + public AjaxResult getRouters() + { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return AjaxResult.success(menuService.buildMenus(menus)); + } } diff --git a/sys-api/src/main/java/com/qihang/sys/api/service/ISysMenuService.java b/sys-api/src/main/java/com/qihang/sys/api/service/ISysMenuService.java index da4df877..6dfff9b3 100644 --- a/sys-api/src/main/java/com/qihang/sys/api/service/ISysMenuService.java +++ b/sys-api/src/main/java/com/qihang/sys/api/service/ISysMenuService.java @@ -1,5 +1,6 @@ package com.qihang.sys.api.service; +import com.qihang.security.vo.RouterVo; import com.qihang.sys.api.domain.SysMenu; import java.util.List; @@ -51,7 +52,7 @@ public interface ISysMenuService * @param userId 用户ID * @return 菜单列表 */ -// public List selectMenuTreeByUserId(Long userId); + public List selectMenuTreeByUserId(Long userId); /** * 根据角色ID查询菜单树信息 @@ -67,7 +68,7 @@ public interface ISysMenuService * @param menus 菜单列表 * @return 路由列表 */ -// public List buildMenus(List menus); + public List buildMenus(List menus); /** * 构建前端所需要树结构 diff --git a/sys-api/src/main/java/com/qihang/sys/api/service/impl/SysMenuServiceImpl.java b/sys-api/src/main/java/com/qihang/sys/api/service/impl/SysMenuServiceImpl.java index 8ee44b5b..4167aea0 100644 --- a/sys-api/src/main/java/com/qihang/sys/api/service/impl/SysMenuServiceImpl.java +++ b/sys-api/src/main/java/com/qihang/sys/api/service/impl/SysMenuServiceImpl.java @@ -2,6 +2,9 @@ package com.qihang.sys.api.service.impl; import com.qihang.common.constant.UserConstants; import com.qihang.common.utils.StringUtils; +import com.qihang.security.vo.MetaVo; +import com.qihang.security.vo.RouterVo; +import com.qihang.sys.api.common.SecurityUtils; import com.qihang.sys.api.constant.Constants; import com.qihang.sys.api.domain.SysMenu; import com.qihang.sys.api.mapper.SysMenuMapper; @@ -104,26 +107,28 @@ public class SysMenuServiceImpl implements ISysMenuService return permsSet; } + + /** * 根据用户ID查询菜单 * * @param userId 用户名称 * @return 菜单列表 */ -// @Override -// public List selectMenuTreeByUserId(Long userId) -// { -// List menus = null; -// if (SecurityUtils.isAdmin(userId)) -// { -// menus = menuMapper.selectMenuTreeAll(); -// } -// else -// { -// menus = menuMapper.selectMenuTreeByUserId(userId); -// } -// return getChildPerms(menus, 0); -// } + @Override + public List selectMenuTreeByUserId(Long userId) + { + List menus = null; + if (SecurityUtils.isAdmin(userId)) + { + menus = menuMapper.selectMenuTreeAll(); + } + else + { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } /** * 根据角色ID查询菜单树信息 @@ -144,57 +149,57 @@ public class SysMenuServiceImpl implements ISysMenuService * @param menus 菜单列表 * @return 路由列表 */ -// @Override -// public List buildMenus(List menus) -// { -// List routers = new LinkedList(); -// for (SysMenu menu : menus) -// { -// RouterVo router = new RouterVo(); -// router.setHidden("1".equals(menu.getVisible())); -// router.setName(getRouteName(menu)); -// router.setPath(getRouterPath(menu)); -// router.setComponent(getComponent(menu)); -// router.setQuery(menu.getQuery()); -// router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); -// List cMenus = menu.getChildren(); -// if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) -// { -// router.setAlwaysShow(true); -// router.setRedirect("noRedirect"); -// router.setChildren(buildMenus(cMenus)); -// } -// else if (isMenuFrame(menu)) -// { -// router.setMeta(null); -// List childrenList = new ArrayList(); -// RouterVo children = new RouterVo(); -// children.setPath(menu.getPath()); -// children.setComponent(menu.getComponent()); -// children.setName(StringUtils.capitalize(menu.getPath())); -// children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); -// children.setQuery(menu.getQuery()); -// childrenList.add(children); -// router.setChildren(childrenList); -// } -// else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) -// { -// router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); -// router.setPath("/"); -// List childrenList = new ArrayList(); -// RouterVo children = new RouterVo(); -// String routerPath = innerLinkReplaceEach(menu.getPath()); -// children.setPath(routerPath); -// children.setComponent(UserConstants.INNER_LINK); -// children.setName(StringUtils.capitalize(routerPath)); -// children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); -// childrenList.add(children); -// router.setChildren(childrenList); -// } -// routers.add(router); -// } -// return routers; -// } + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } /** * 构建前端所需要树结构 diff --git a/vue/src/api/menu.js b/vue/src/api/menu.js index faef101c..b5e3a4f8 100644 --- a/vue/src/api/menu.js +++ b/vue/src/api/menu.js @@ -3,7 +3,7 @@ import request from '@/utils/request' // 获取路由 export const getRouters = () => { return request({ - url: '/getRouters', + url: '/api/sys-api/getRouters', method: 'get' }) -} \ No newline at end of file +}