diff --git a/like-admin/src/main/java/com/hxkj/admin/LikeAdminApplication.java b/like-admin/src/main/java/com/hxkj/admin/LikeAdminApplication.java index 406dc09a..9b00c176 100644 --- a/like-admin/src/main/java/com/hxkj/admin/LikeAdminApplication.java +++ b/like-admin/src/main/java/com/hxkj/admin/LikeAdminApplication.java @@ -6,10 +6,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @ComponentScan(basePackages = {"com.hxkj"}) @MapperScan(basePackages = {"com.hxkj.*.mapper"}) +@EnableTransactionManagement @SpringBootApplication(exclude = {MPJSqlInjector.class}) public class LikeAdminApplication { diff --git a/like-admin/src/main/java/com/hxkj/admin/config/JwtFilter.java b/like-admin/src/main/java/com/hxkj/admin/config/JwtFilter.java new file mode 100644 index 00000000..67369874 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/config/JwtFilter.java @@ -0,0 +1,90 @@ +package com.hxkj.admin.config; + +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class JwtFilter extends BasicHttpAuthenticationFilter { + + /** + * 执行登录认证(判断请求头是否带上token) + * @param request + * @param response + * @param mappedValue + * @return + */ + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + System.out.println("酷酷酷酷酷"); + // 如果请求头不存在token,则可能是执行登陆操作或是游客状态访问,直接返回true + if (isLoginAttempt(request, response)) { + return true; + } + + // 如果存在,则进入executeLogin方法执行登入,检查token 是否正确 + try { + executeLogin(request, response);return true; + } catch (Exception e) { + throw new AuthenticationException("Token失效请重新登录"); + } + } + + /** + * 判断用户是否是登入,检测headers里是否包含token字段 + */ + @Override + protected boolean isLoginAttempt(ServletRequest request, ServletResponse response) { + + HttpServletRequest req = (HttpServletRequest) request; +// if(antPathMatcher.match("/userLogin",req.getRequestURI())){ +// return true; +// } +// String token = req.getHeader("token"); +// if (token == null) { +// return false; +// } +// Object o = redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token); +// if(ObjectUtils.isEmpty(o)){ +// return false; +// } + + return true; + } + + /** + * 重写AuthenticatingFilter的executeLogin方法丶执行登陆操作 + */ + @Override + protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { + + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String token = httpServletRequest.getHeader("token");//Access-Token + JwtToken jwtToken = new JwtToken(token); + // 提交给realm进行登入,如果错误他会抛出异常并被捕获, 反之则代表登入成功,返回true + getSubject(request, response).login(jwtToken);return true; + } + + /** + * 对跨域提供支持 + */ + @Override + protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); + httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE"); + httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers")); + if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) { + httpServletResponse.setStatus(HttpStatus.OK.value()); + return false; + } + return super.preHandle(request, response); + } + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/config/JwtToken.java b/like-admin/src/main/java/com/hxkj/admin/config/JwtToken.java new file mode 100644 index 00000000..97604c06 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/config/JwtToken.java @@ -0,0 +1,28 @@ +package com.hxkj.admin.config; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * 主要是为了将用户信息改为Token传递 + * 重写Token,通过token方式进行验证 + */ +public class JwtToken implements AuthenticationToken { + + private final String token; + + public JwtToken(String token) { + System.out.println("就将计就计"); + this.token = token; + } + + @Override + public Object getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/config/RealmConfig.java b/like-admin/src/main/java/com/hxkj/admin/config/RealmConfig.java deleted file mode 100644 index b9921c11..00000000 --- a/like-admin/src/main/java/com/hxkj/admin/config/RealmConfig.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.hxkj.admin.config; - -import org.apache.catalina.User; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.*; -import org.apache.shiro.authz.AuthorizationInfo; -import org.apache.shiro.authz.SimpleAuthorizationInfo; -import org.apache.shiro.realm.AuthorizingRealm; -import org.apache.shiro.subject.PrincipalCollection; -import org.apache.shiro.subject.Subject; - -public class RealmConfig extends AuthorizingRealm { - - /** - * 授权 - * @param principals 主要 - * @return AuthorizationInfo - */ - @Override - protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { - SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); - info.addStringPermission("user:add"); - - // 拿到当前登录对象 - Subject subject = SecurityUtils.getSubject(); - User currentUser = (User) subject.getPrincipal(); - //info.addStringPermission(currentUser.getPerms()); - - return info; - } - - /** - * 认证 - * @param token 令牌 - * @return AuthenticationInfo - */ - @Override - protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { - String name = "root"; - String password = "123456"; - - UsernamePasswordToken userToken = (UsernamePasswordToken) token; - if (!userToken.getUsername().equals(name)) { - return null; - } - - // 密码认证 - return new SimpleAuthenticationInfo("", password, ""); - } - -} diff --git a/like-admin/src/main/java/com/hxkj/admin/config/ShiroConfig.java b/like-admin/src/main/java/com/hxkj/admin/config/ShiroConfig.java index 701514ce..0a40dc6d 100644 --- a/like-admin/src/main/java/com/hxkj/admin/config/ShiroConfig.java +++ b/like-admin/src/main/java/com/hxkj/admin/config/ShiroConfig.java @@ -1,59 +1,111 @@ package com.hxkj.admin.config; +import org.apache.shiro.authc.credential.HashedCredentialsMatcher; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.DelegatingFilterProxy; +import javax.servlet.Filter; import java.util.LinkedHashMap; import java.util.Map; -//@Configuration +@Configuration public class ShiroConfig { /** - * 拦截过滤器配置 - * @return ShiroFilterFactoryBean + * 安全管理器 + * + * @param realmConfig realmConfig + * @return DefaultWebSecurityManager */ @Bean - public ShiroFilterFactoryBean getShiroFactoryFilterBean(DefaultWebSecurityManager defaultWebSecurityManager) { + public DefaultWebSecurityManager doDefaultWebSecurityManager(ShiroRealm realmConfig) { + DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); + defaultWebSecurityManager.setRealm(realmConfig); + + DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); + DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator(); + defaultSessionStorageEvaluator.setSessionStorageEnabled(false); + subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator); + defaultWebSecurityManager.setSubjectDAO(subjectDAO); + + return defaultWebSecurityManager; + } + + /** + * 拦截过滤器配置 + * anon: 无需认证就可以访问 + * authc: 必须认证了才能访问 + * perms: 拥有某个资源权限才能访问 + * role: 拥有某个角色权限才能访问 + * @return ShiroFilterFactoryBean + */ + @Bean(name = "shiroFilter") + public ShiroFilterFactoryBean doShiroFactoryFilterBean(DefaultWebSecurityManager defaultWebSecurityManager) { // 设置安全管理器 ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(defaultWebSecurityManager); - /* - * 设置内置过滤器 - * anon: 无需认证就可以访问 - * authc: 必须认证了才能访问 - * perms: 拥有某个资源权限才能访问 - * role: 拥有某个角色权限才能访问 - */ -// Map filterMap = new LinkedHashMap<>(); -// filterMap.put("/user/add", "authc"); -// filterMap.put("/user/update", "authc"); -// bean.setFilterChainDefinitionMap(filterMap); + // 设置内置过滤器 + Map filterChainDefinitionMap = new LinkedHashMap<>(); + filterChainDefinitionMap .put("/user/add", "authc"); + filterChainDefinitionMap .put("/user/update", "authc"); + bean.setFilterChainDefinitionMap(filterChainDefinitionMap ); - // 未登录 -// bean.setLoginUrl("/toLogin"); - - // 未授权 - // bean.setUnauthorizedUrl("/auth"); + // 设置自定过滤器 + LinkedHashMap filterMap = new LinkedHashMap<>(); + filterMap.put("jwt", jwtFilter()); + bean.setFilters(filterMap); + // 返回构建配置 return bean; } - // 安全管理器 + /** + * SpringShiroFilter首先注册到spring容器 + * 然后被包装成FilterRegistrationBean + * 最后通过FilterRegistrationBean注册到servlet容器 + * + * @return FilterRegistrationBean + */ @Bean - public DefaultWebSecurityManager getDefaultWebSecurityManager(RealmConfig realmConfig) { - DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); - defaultWebSecurityManager.setRealm(realmConfig); - return defaultWebSecurityManager; + public FilterRegistrationBean delegatingFilterProxy(){ + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); + DelegatingFilterProxy proxy = new DelegatingFilterProxy(); + proxy.setTargetFilterLifecycle(true); + proxy.setTargetBeanName("shiroFilter"); + filterRegistrationBean.setFilter(proxy); + return filterRegistrationBean; } + /** + * 设置加密次数 + * + * @return HashedCredentialsMatcher + */ + @Bean(name = "hashedCredentialsMatcher") + public HashedCredentialsMatcher hashedCredentialsMatcher() { + HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); + hashedCredentialsMatcher.setHashAlgorithmName("MD5"); + hashedCredentialsMatcher.setHashIterations(1024);// 设置加密次数 + return hashedCredentialsMatcher; + } + + // 自定realm @Bean - public RealmConfig userRealm() { - return new RealmConfig(); + public ShiroRealm userRealm() { + return new ShiroRealm(); + } + + @Bean + public JwtFilter jwtFilter() { + return new JwtFilter(); } } diff --git a/like-admin/src/main/java/com/hxkj/admin/config/ShiroRealm.java b/like-admin/src/main/java/com/hxkj/admin/config/ShiroRealm.java new file mode 100644 index 00000000..fca0d094 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/config/ShiroRealm.java @@ -0,0 +1,89 @@ +package com.hxkj.admin.config; + +import com.hxkj.admin.service.ISysAdminService; +import com.hxkj.common.entity.system.SysAdmin; +import org.apache.catalina.User; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.apache.shiro.subject.Subject; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +public class ShiroRealm extends AuthorizingRealm { + + @Resource + ISysAdminService iSysAdminService; + + + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof JwtToken; + } + + + /** + * 授权: 根据认证数据验证用户权限 + * + * @param principals 包含了所有已认证的安全数据 + * @return AuthorizationInfo 授权数据 + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + // 1、获取用户安全数据 + Integer adminId = (Integer) principals.getPrimaryPrincipal(); + + // 2、根据用户ID查询用户 + + // 3、查询用户角色权限 + List perms = new ArrayList<>(); + perms.add("user:add"); + perms.add("user:update"); + + List roles = new ArrayList<>(); + roles.add("role1"); + roles.add("role2"); + + // 4、构造返回 + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); + info.addStringPermissions(perms); + info.addRoles(roles); + + return info; + } + + /** + * 认证: 校验用户名和密码是否一致 + * + * @param auth 令牌 + * @return AuthenticationInfo + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) { + + System.out.println("靠靠靠靠靠靠靠"); + String token = (String) auth.getCredentials(); + + // 登录参数 +// UsernamePasswordToken upToken = (UsernamePasswordToken) token; +// String username = upToken.getUsername(); +// String password = new String(upToken.getPassword()); +// +// // 验证用户 +// SysAdmin sysAdmin = iSysAdminService.findByUsername(username); +// if (sysAdmin == null) { +// return null; +// } else if (!password.equals(sysAdmin.getPassword())) { +// return null; +// } + + // 登录成功 + return new SimpleAuthenticationInfo(1, "13", "shiroRealm"); + } + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/controller/system/SysAdminController.java b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysAdminController.java index 9e67e091..ce2a10a6 100644 --- a/like-admin/src/main/java/com/hxkj/admin/controller/system/SysAdminController.java +++ b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysAdminController.java @@ -3,10 +3,10 @@ package com.hxkj.admin.controller.system; import com.hxkj.admin.service.ISysAdminService; import com.hxkj.admin.validate.PageParam; import com.hxkj.admin.validate.SysAdminParam; +import com.hxkj.admin.vo.system.SysAdminDetailVo; import com.hxkj.admin.vo.system.SysAdminListVo; import com.hxkj.common.core.AjaxResult; import com.hxkj.common.core.PageResult; -import com.hxkj.common.entity.system.SysAdmin; import com.hxkj.common.validator.annotation.IDMust; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -42,8 +42,8 @@ public class SysAdminController { */ @GetMapping("/detail") public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) { - SysAdmin sysAdmin = iSysAdminService.detail(id); - return AjaxResult.success(sysAdmin); + SysAdminDetailVo vo = iSysAdminService.detail(id); + return AjaxResult.success(vo); } /** diff --git a/like-admin/src/main/java/com/hxkj/admin/controller/system/SysLoginController.java b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysLoginController.java new file mode 100644 index 00000000..c79ca64c --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysLoginController.java @@ -0,0 +1,53 @@ +package com.hxkj.admin.controller.system; + +import com.hxkj.admin.validate.SysLoginParam; +import com.hxkj.common.core.AjaxResult; +import com.hxkj.common.utils.JwtUtil; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/system") +public class SysLoginController { + + /** + * 登录系统 + * + * @author fzr + * @param sysLoginParam 登录参数 + * @return Object + */ + @PostMapping("/login") + public Object login(@Validated() @RequestBody SysLoginParam sysLoginParam) { + + + String username = sysLoginParam.getUsername(); + String password = sysLoginParam.getPassword(); + UsernamePasswordToken token = new UsernamePasswordToken(username, password); + System.out.println("斤斤计较"); + Subject subject = SecurityUtils.getSubject(); + try { + subject.login(token); + return AjaxResult.success(); + } catch (AuthenticationException e) { + String msg = "用户或密码错误"; + if (!e.getMessage().equals("")) { + msg = e.getMessage(); + } + return AjaxResult.failed(msg); + } + } + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/controller/system/SysRoleController.java b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysRoleController.java index a50f46d9..8e42d842 100644 --- a/like-admin/src/main/java/com/hxkj/admin/controller/system/SysRoleController.java +++ b/like-admin/src/main/java/com/hxkj/admin/controller/system/SysRoleController.java @@ -2,11 +2,11 @@ package com.hxkj.admin.controller.system; import com.hxkj.admin.service.ISysRoleService; import com.hxkj.admin.validate.PageParam; -import com.hxkj.admin.validate.SysAdminParam; import com.hxkj.admin.validate.SysRoleParam; import com.hxkj.admin.vo.system.SysRoleListVo; import com.hxkj.common.core.AjaxResult; import com.hxkj.common.core.PageResult; +import com.hxkj.common.validator.annotation.IDMust; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -19,32 +19,66 @@ public class SysRoleController { @Resource ISysRoleService iSysRoleService; + /** + * 角色列表 + * + * @author fzr + * @param pageParam 分页参数 + * @return Object + */ @GetMapping("/lists") public Object lists(@Validated PageParam pageParam) { PageResult lists = iSysRoleService.lists(pageParam); return AjaxResult.success(lists); } + /** + * 角色详情 + * + * @author fzr + * @return Object + */ @GetMapping("/detail") public Object detail() { return null; } + /** + * 新增角色 + * + * @author fzr + * @param sysRoleParam 角色参数 + * @return Object + */ @PostMapping("/add") public Object add(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) { iSysRoleService.add(sysRoleParam); return AjaxResult.success(); } + /** + * 编辑角色 + * + * @author fzr + * @param sysRoleParam 角色参数 + * @return Object + */ @PostMapping("/edit") public Object edit(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) { iSysRoleService.edit(sysRoleParam); return AjaxResult.success(); } + /** + * 删除角色 + * + * @author fzr + * @param id 角色ID + * @return Object + */ @PostMapping("/del") - public Object del(@Validated(value = SysRoleParam.create.class) @RequestBody SysRoleParam sysRoleParam) { - iSysRoleService.del(sysRoleParam.getId()); + public Object del(@Validated @IDMust() @RequestBody Integer id) { + iSysRoleService.del(id); return AjaxResult.success(); } diff --git a/like-admin/src/main/java/com/hxkj/admin/service/ISysAdminService.java b/like-admin/src/main/java/com/hxkj/admin/service/ISysAdminService.java index c16eedbd..3115efab 100644 --- a/like-admin/src/main/java/com/hxkj/admin/service/ISysAdminService.java +++ b/like-admin/src/main/java/com/hxkj/admin/service/ISysAdminService.java @@ -1,10 +1,10 @@ package com.hxkj.admin.service; -import com.baomidou.mybatisplus.extension.service.IService; import com.hxkj.admin.validate.PageParam; import com.hxkj.admin.validate.SysAdminParam; +import com.hxkj.admin.vo.system.SysAdminDetailVo; import com.hxkj.admin.vo.system.SysAdminListVo; -import com.hxkj.common.core.BaseService; +import com.hxkj.common.basics.BaseService; import com.hxkj.common.core.PageResult; import com.hxkj.common.entity.system.SysAdmin; @@ -13,7 +13,16 @@ import java.util.Map; public interface ISysAdminService extends BaseService { /** - * 获取管理员列表 + * 根据账号查找管理员 + * + * @author fzr + * @param username 主键ID + * @return SysAdmin + */ + SysAdmin findByUsername(String username); + + /** + * 管理员列表 * * @author fzr * @param pageParam 分页参数 @@ -22,13 +31,13 @@ public interface ISysAdminService extends BaseService { PageResult lists(PageParam pageParam, Map params); /** - * 获取管理员详情 + * 管理员详情 * * @author fzr * @param id 主键参数 * @return SysAdmin */ - SysAdmin detail(Integer id); + SysAdminDetailVo detail(Integer id); /** * 新增管理员 diff --git a/like-admin/src/main/java/com/hxkj/admin/service/ISysMenuService.java b/like-admin/src/main/java/com/hxkj/admin/service/ISysMenuService.java index a5a1541c..a20a164f 100644 --- a/like-admin/src/main/java/com/hxkj/admin/service/ISysMenuService.java +++ b/like-admin/src/main/java/com/hxkj/admin/service/ISysMenuService.java @@ -1,20 +1,50 @@ package com.hxkj.admin.service; import com.alibaba.fastjson.JSONArray; -import com.baomidou.mybatisplus.extension.service.IService; import com.hxkj.admin.validate.SysMenuParam; +import com.hxkj.common.basics.BaseService; import com.hxkj.common.entity.system.SysMenu; -public interface ISysMenuService extends IService { +public interface ISysMenuService extends BaseService { + /** + * 菜单列表 + * + * @return JSONArray + */ JSONArray lists(); + /** + * 菜单详情 + * + * @author fzr + * @param id 主键 + * @return SysMenu + */ SysMenu detail(Integer id); + /** + * 新增菜单 + * + * @author fzr + * @param sysMenuParam 参数 + */ void add(SysMenuParam sysMenuParam); + /** + * 编辑菜单 + * + * @author fzr + * @param sysMenuParam 参数 + */ void edit(SysMenuParam sysMenuParam); + /** + * 删除菜单 + * + * @author fzr + * @param id 主键 + */ void del(Integer id); } diff --git a/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleMenuService.java b/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleMenuService.java new file mode 100644 index 00000000..82466ab4 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleMenuService.java @@ -0,0 +1,26 @@ +package com.hxkj.admin.service; + +import com.hxkj.common.basics.BaseService; +import com.hxkj.common.entity.system.SysRoleMenu; + +public interface ISysRoleMenuService extends BaseService { + + /** + * 批量写入角色菜单 + * + * @author fzr + * @param roleId 角色ID + * @param ids 菜单ID组 + */ + void batchSaveByMenuIds(Integer roleId, String ids); + + + /** + * 根据ID批量删除角色菜单 + * + * @author fzr + * @param roleId 角色ID + */ + void batchDeleteByRoleId(Integer roleId); + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleService.java b/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleService.java index 6b29148d..4d7b3f80 100644 --- a/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleService.java +++ b/like-admin/src/main/java/com/hxkj/admin/service/ISysRoleService.java @@ -1,14 +1,14 @@ package com.hxkj.admin.service; -import com.baomidou.mybatisplus.extension.service.IService; import com.hxkj.admin.validate.PageParam; import com.hxkj.admin.validate.SysRoleParam; import com.hxkj.admin.vo.system.SysRoleListVo; +import com.hxkj.common.basics.BaseService; import com.hxkj.common.core.PageResult; import com.hxkj.common.entity.system.SysRole; import org.springframework.validation.annotation.Validated; -public interface ISysRoleService extends IService { +public interface ISysRoleService extends BaseService { /** * 根据id获取角色名称 diff --git a/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysAdminServiceImpl.java b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysAdminServiceImpl.java index c28a0f09..5d339c4e 100644 --- a/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysAdminServiceImpl.java +++ b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysAdminServiceImpl.java @@ -9,6 +9,7 @@ import com.hxkj.admin.service.ISysAdminService; import com.hxkj.admin.service.ISysRoleService; import com.hxkj.admin.validate.PageParam; import com.hxkj.admin.validate.SysAdminParam; +import com.hxkj.admin.vo.system.SysAdminDetailVo; import com.hxkj.admin.vo.system.SysAdminListVo; import com.hxkj.common.core.PageResult; import com.hxkj.common.entity.system.SysAdmin; @@ -28,6 +29,20 @@ public class ISysAdminServiceImpl extends MPJBaseServiceImpl() + .eq("username", username) + .last("limit 1")); + } + /** * 获取管理员列表 * @@ -50,11 +65,11 @@ public class ISysAdminServiceImpl extends MPJBaseServiceImpl iPage = this.page(new Page<>(page, limit), queryWrapper); List adminVoArrayList = new ArrayList<>(); @@ -80,7 +95,7 @@ public class ISysAdminServiceImpl extends MPJBaseServiceImpl() .select(SysAdmin.class, info-> !info.getColumn().equals("salt") && @@ -93,7 +108,12 @@ public class ISysAdminServiceImpl extends MPJBaseServiceImpl sysMenus = this.list( queryWrapper); @@ -56,17 +55,14 @@ public class ISysMenuServiceImpl extends MPJBaseServiceImpl() - .eq("id", id) - .eq("is_delete", 0)); - + SysMenu model = this.getOne(new QueryWrapper().eq("id", id)); Assert.notNull(model, "菜单已不存在!"); - return model; } @@ -99,10 +95,7 @@ public class ISysMenuServiceImpl extends MPJBaseServiceImpl() - .eq("id", sysMenuParam.getId()) - .eq("is_delete", 0)); - + SysMenu model = this.getOne(new QueryWrapper().eq("id", sysMenuParam.getId())); Assert.notNull(model, "菜单已不存在!"); model.setMenuType(sysMenuParam.getMenuType()); @@ -124,16 +117,9 @@ public class ISysMenuServiceImpl extends MPJBaseServiceImpl() - .eq("id", id) - .eq("is_delete", 0)); - + SysMenu model = this.getOne(new QueryWrapper().eq("id", id)); Assert.notNull(model, "菜单已不存在!"); - - model.setId(id); - model.setIsDelete(1); - model.setDeleteTime(System.currentTimeMillis() / 1000); - this.updateById(model); + this.removeById(id); } } diff --git a/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleMenuServiceImpl.java b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleMenuServiceImpl.java new file mode 100644 index 00000000..d5a51715 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleMenuServiceImpl.java @@ -0,0 +1,49 @@ +package com.hxkj.admin.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.yulichang.base.MPJBaseServiceImpl; +import com.hxkj.admin.service.ISysRoleMenuService; +import com.hxkj.common.entity.system.SysRoleMenu; +import com.hxkj.common.mapper.system.SysRoleMenuMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class ISysRoleMenuServiceImpl extends MPJBaseServiceImpl implements ISysRoleMenuService { + + /** + * 批量写入角色菜单 + * + * @author fzr + * @param roleId 角色ID + * @param ids 菜单ID组 + */ + @Override + public void batchSaveByMenuIds(Integer roleId, String ids) { + if (ids != null && !ids.equals("")) { + List arrayList = new ArrayList<>(); + for (String menuId : ids.split(",")) { + SysRoleMenu model = new SysRoleMenu(); + model.setRoleId(roleId); + model.setMenuId(Integer.parseInt(menuId)); + arrayList.add(model); + } + + this.saveBatch(arrayList); + } + } + + /** + * 批量删除角色菜单 + * + * @author fzr + * @param roleId 角色ID + */ + @Override + public void batchDeleteByRoleId(Integer roleId) { + this.remove(new QueryWrapper().eq("role_id", roleId)); + } + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleServiceImpl.java b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleServiceImpl.java index 64347815..e313fcff 100644 --- a/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleServiceImpl.java +++ b/like-admin/src/main/java/com/hxkj/admin/service/impl/ISysRoleServiceImpl.java @@ -5,18 +5,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseServiceImpl; +import com.hxkj.admin.service.ISysMenuService; +import com.hxkj.admin.service.ISysRoleMenuService; import com.hxkj.admin.service.ISysRoleService; import com.hxkj.admin.validate.PageParam; import com.hxkj.admin.validate.SysRoleParam; import com.hxkj.admin.vo.system.SysRoleListVo; import com.hxkj.common.core.PageResult; import com.hxkj.common.entity.system.SysRole; +import com.hxkj.common.mapper.system.SysMenuMapper; import com.hxkj.common.mapper.system.SysRoleMapper; import com.hxkj.common.utils.TimeUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -24,6 +29,10 @@ import java.util.List; @Service public class ISysRoleServiceImpl extends MPJBaseServiceImpl implements ISysRoleService { + @Resource + ISysRoleMenuService iSysRoleMenuService; + + /** * 根据ID获取角色名称 * @@ -34,10 +43,9 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.select("id", "name"); - queryWrapper.eq("id", id); - queryWrapper.eq("is_delete", 0); - queryWrapper.last("limit 1"); + queryWrapper.select("id", "name") + .eq("id", id) + .last("limit 1"); SysRole sysRole = this.getOne(queryWrapper, false); if (sysRole == null) { @@ -62,7 +70,6 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl !info.getColumn().equals("is_delete") && !info.getColumn().equals("delete_time")) - .eq("is_delete", 0) .orderByDesc(Arrays.asList("sort", "id")); IPage iPage = this.page(new Page<>(page, limit), queryWrapper); @@ -91,7 +98,6 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl() .eq("id", id) - .eq("is_delete", 0) .last("limit 1")); Assert.notNull(sysRole, "角色已不存在!"); @@ -106,21 +112,22 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl() .select("id,name") .eq("name", sysRoleParam.getName().trim()) - .eq("is_delete", 0) .last("limit 1")), "角色名称已存在!"); SysRole model = new SysRole(); model.setName(sysRoleParam.getName().trim()); model.setRemark(sysRoleParam.getRemark()); - model.setMenuIds(sysRoleParam.getMenuIds()); model.setIsDisable(sysRoleParam.getIsDisable()); model.setCreateTime(System.currentTimeMillis() / 1000); model.setUpdateTime(System.currentTimeMillis() / 1000); this.save(model); + + iSysRoleMenuService.batchSaveByMenuIds(sysRoleParam.getId(), sysRoleParam.getMenuIds()); } /** @@ -130,28 +137,29 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl() .select("id,name") .eq("id", sysRoleParam.getId()) - .eq("is_delete", 0) .last("limit 1")), "角色已不存在!"); Assert.isNull(this.getOne(new QueryWrapper() .select("id,name") .ne("id", sysRoleParam.getId()) .eq("name", sysRoleParam.getName().trim()) - .eq("is_delete", 0) .last("limit 1")), "角色名称已存在!"); SysRole model = new SysRole(); model.setId(sysRoleParam.getId()); model.setName(sysRoleParam.getName().trim()); model.setRemark(sysRoleParam.getRemark()); - model.setMenuIds(sysRoleParam.getMenuIds()); model.setIsDisable(sysRoleParam.getIsDisable()); model.setUpdateTime(System.currentTimeMillis() / 1000); this.updateById(model); + + iSysRoleMenuService.batchDeleteByRoleId(sysRoleParam.getId()); + iSysRoleMenuService.batchSaveByMenuIds(sysRoleParam.getId(), sysRoleParam.getMenuIds()); } /** @@ -161,19 +169,17 @@ public class ISysRoleServiceImpl extends MPJBaseServiceImpl() - .select("id,name") - .eq("id", id) - .eq("is_delete", 0) - .last("limit 1")); + Assert.notNull( + this.getOne(new QueryWrapper() + .select("id,name") + .eq("id", id) + .last("limit 1")), + "角色已不存在!"); - Assert.notNull(sysRole, "角色已不存在!"); - - sysRole.setId(id); - sysRole.setIsDelete(1); - sysRole.setDeleteTime(System.currentTimeMillis() / 1000); - this.updateById(sysRole); + this.removeById(id); + iSysRoleMenuService.batchDeleteByRoleId(id); } } diff --git a/like-admin/src/main/java/com/hxkj/admin/validate/SysLoginParam.java b/like-admin/src/main/java/com/hxkj/admin/validate/SysLoginParam.java new file mode 100644 index 00000000..d1d44b1a --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/validate/SysLoginParam.java @@ -0,0 +1,29 @@ +package com.hxkj.admin.validate; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; + +/** + * 系统登录参数 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysLoginParam implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotEmpty(message = "账号不能为空") + @Length(min = 2, max = 20, message = "账号或密码错误") + private String username; + + @NotEmpty(message = "密码不能为空") + @Length(min = 6, max = 18, message = "账号或密码错误") + private String password; + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/validate/SysRoleParam.java b/like-admin/src/main/java/com/hxkj/admin/validate/SysRoleParam.java index 7e0ea42f..dc68c4ee 100644 --- a/like-admin/src/main/java/com/hxkj/admin/validate/SysRoleParam.java +++ b/like-admin/src/main/java/com/hxkj/admin/validate/SysRoleParam.java @@ -13,9 +13,8 @@ public class SysRoleParam { public interface create{} public interface update{} - public interface delete{} - @IDMust(message = "id参数必传且需大于0", groups = {update.class, delete.class}) + @IDMust(message = "id参数必传且需大于0", groups = {update.class}) private Integer id; @NotNull(message = "缺少参数name", groups = {create.class, update.class}) diff --git a/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminDetailVo.java b/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminDetailVo.java new file mode 100644 index 00000000..d809dd59 --- /dev/null +++ b/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminDetailVo.java @@ -0,0 +1,19 @@ +package com.hxkj.admin.vo.system; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SysAdminDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + private String username; + private String nickname; + private String avatar; + private Integer role; + private Integer isDisable; + +} diff --git a/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminListVo.java b/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminListVo.java index e4532e81..41f398bc 100644 --- a/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminListVo.java +++ b/like-admin/src/main/java/com/hxkj/admin/vo/system/SysAdminListVo.java @@ -3,7 +3,6 @@ package com.hxkj.admin.vo.system; import lombok.Data; import java.io.Serializable; -import java.util.List; @Data public class SysAdminListVo implements Serializable { @@ -15,7 +14,7 @@ public class SysAdminListVo implements Serializable { private String nickname; private String avatar; private String role; - private Boolean isDisable; + private Integer isDisable; private String lastLoginIp; private String lastLoginTime; private String createTime; diff --git a/like-common/pom.xml b/like-common/pom.xml index ef697260..f2e4ea56 100644 --- a/like-common/pom.xml +++ b/like-common/pom.xml @@ -62,11 +62,16 @@ org.projectlombok lombok - + com.alibaba fastjson + + + com.auth0 + java-jwt + \ No newline at end of file diff --git a/like-common/src/main/java/com/hxkj/common/basics/BaseMapper.java b/like-common/src/main/java/com/hxkj/common/basics/BaseMapper.java new file mode 100644 index 00000000..af474e44 --- /dev/null +++ b/like-common/src/main/java/com/hxkj/common/basics/BaseMapper.java @@ -0,0 +1,13 @@ +package com.hxkj.common.basics; + +import com.github.yulichang.base.MPJBaseMapper; +import org.apache.ibatis.annotations.Mapper; + + +/** + * 基类Mapper + * @param + */ +@Mapper +public interface BaseMapper extends MPJBaseMapper { +} diff --git a/like-common/src/main/java/com/hxkj/common/basics/BaseService.java b/like-common/src/main/java/com/hxkj/common/basics/BaseService.java new file mode 100644 index 00000000..5f0ba180 --- /dev/null +++ b/like-common/src/main/java/com/hxkj/common/basics/BaseService.java @@ -0,0 +1,152 @@ +package com.hxkj.common.basics; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.hxkj.common.core.PageResult; +import com.hxkj.common.entity.system.SysAdmin; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 基础服务接口类 + */ +public interface BaseService extends IService { + + /** + * 设置搜索条件 + * + * @author fzr + * @param queryWrapper 条件构造器 + * @param params 参数[条件:键@数据库字段:类型] + * @param conditions 条件 + */ + default void setSearch(QueryWrapper queryWrapper, Map params, String[] conditions) { + + for (String condition : conditions) { + String[] array = condition.split(":"); + String type = array.length > 2 ? array[2].trim() : ""; + String where = array[0].trim(); + String[] keyArr = array[1].trim().split("@"); + String key = keyArr[0].trim(); + String field = keyArr.length > 1 ? keyArr[1].trim() : keyArr[0].trim(); + String value = params.getOrDefault(key, ""); + + if (value.equals("")) { + continue; + } + + if ((!type.equals("") && !Arrays.asList("int", "long", "str").contains(type))) { + System.out.println("搜索参数类型不在固定值内[int,long,str]"); + continue; + } + + Object val = value; + switch (where) { + case "=": + case "<>": + case ">": + case ">=": + case "<": + case "<=": + if (type.equals("int")) { + val = Integer.parseInt(value); + } else if (type.equals("long")) { + val = Long.parseLong(value); + } + case "in": + case "notIn": + if (type.equals("int")) { + List intData = new ArrayList<>(); + for (String v : value.split(",")) { + intData.add(Integer.parseInt(v.trim())); + } + val = intData; + } else if (type.equals("long")){ + List longData = new ArrayList<>(); + for (String v : value.split(",")) { + longData.add(Long.parseLong(v.trim())); + } + val = longData; + } + } + + switch (where) { + case "=": + queryWrapper.eq(field, val); + break; + case "<>": + queryWrapper.ne(field, val); + break; + case ">": + queryWrapper.gt(field, val); + break; + case ">=": + queryWrapper.ge(field, val); + break; + case "<": + queryWrapper.lt(field, val); + break; + case "<=": + queryWrapper.le(field, val); + break; + case "between": + String[] betArr = value.split(","); + if (type.equals("int")) { + queryWrapper.between(field, Integer.parseInt(betArr[0]), Integer.parseInt(betArr[1])); + } else if (type.equals("long")){ + queryWrapper.between(field, Long.parseLong(betArr[0]), Long.parseLong(betArr[1])); + } else { + queryWrapper.between(field, betArr[0], betArr[1]); + } + break; + case "notBetween": + String[] notBetArr = value.split(","); + if (type.equals("int")) { + queryWrapper.notBetween(field, Integer.parseInt(notBetArr[0]), Integer.parseInt(notBetArr[1])); + } else if (type.equals("long")){ + queryWrapper.notBetween(field, Long.parseLong(notBetArr[0]), Long.parseLong(notBetArr[1])); + } else { + queryWrapper.notBetween(field, notBetArr[0], notBetArr[1]); + } + break; + case "like": + queryWrapper.like(field, val); + break; + case "notLike": + queryWrapper.notLike(field, val); + break; + case "likeLeft": + queryWrapper.likeLeft(field, val); + break; + case "likeRight": + queryWrapper.likeRight(field, val); + break; + case "in": + queryWrapper.in(field, val); + break; + case "notIn": + queryWrapper.notIn(field, val); + break; + } + } + } + + /** + * 求和聚合 + * + * @param field 字段名 + * @param queryWrapper 条件构造器 + * @return Long + */ + default BigDecimal sum(String field, QueryWrapper queryWrapper) { + queryWrapper.select("IFNULL(sum("+field+"), 0) as totalValue"); + Map map = this.getMap(queryWrapper); + return (BigDecimal) map.get("totalValue"); + } + +} diff --git a/like-common/src/main/java/com/hxkj/common/core/BaseService.java b/like-common/src/main/java/com/hxkj/common/core/BaseService.java deleted file mode 100644 index a95436c6..00000000 --- a/like-common/src/main/java/com/hxkj/common/core/BaseService.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.hxkj.common.core; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -public interface BaseService extends IService { - - default void setSearch(QueryWrapper queryWrapper, Map params, String[] conditions) { - - for (String condition : conditions) { - String[] array = condition.split(":"); - String type = array[0].trim(); - String where = array[2].trim(); - String[] arr = array[1].trim().split("@"); - String key = arr[0].trim(); - String field = arr.length > 1 ? arr[1].trim() : arr[0].trim(); - String value = params.getOrDefault(key, ""); - - if (value.equals("")) { - continue; - } - - Object val = value; - switch (type) { - case "int": - val = Integer.parseInt(value); - break; - case "long": - val = Long.parseLong(value); - break; - case "strList": - val = Arrays.asList(value.split(",")); - break; - case "intList": - List intData = new ArrayList<>(); - for (String v : value.split(",")) { - intData.add(Integer.parseInt(v.trim())); - } - val = intData; - break; - case "longList": - List longData = new ArrayList<>(); - for (String v : value.split(",")) { - longData.add(Long.parseLong(v.trim())); - } - val = longData; - break; - } - - switch (where) { - case "=": - queryWrapper.eq(field, val); - break; - case "<>": - queryWrapper.ne(field, val); - break; - case ">": - queryWrapper.gt(field, val); - break; - case ">=": - queryWrapper.ge(field, val); - break; - case "<": - queryWrapper.lt(field, val); - break; - case "<=": - queryWrapper.le(field, val); - break; - case "between": - String[] betArr = value.split(","); - queryWrapper.between(field, Integer.parseInt(betArr[0]), Integer.parseInt(betArr[1])); - break; - case "notBetween": - String[] notBetArr = value.split(","); - queryWrapper.notBetween(field, Integer.parseInt(notBetArr[0]), Integer.parseInt(notBetArr[1])); - break; - case "like": - queryWrapper.like(field, val); - break; - case "notLike": - queryWrapper.notLike(field, val); - break; - case "likeLeft": - queryWrapper.likeLeft(field, val); - break; - case "likeRight": - queryWrapper.likeRight(field, val); - break; - case "in": - queryWrapper.in(field, val); - break; - case "notIn": - queryWrapper.notIn(field, val); - break; - } - } - - } - -} diff --git a/like-common/src/main/java/com/hxkj/common/entity/system/SysMenu.java b/like-common/src/main/java/com/hxkj/common/entity/system/SysMenu.java index df7e5013..d8b07735 100644 --- a/like-common/src/main/java/com/hxkj/common/entity/system/SysMenu.java +++ b/like-common/src/main/java/com/hxkj/common/entity/system/SysMenu.java @@ -23,9 +23,7 @@ public class SysMenu implements Serializable { private Integer menuSort; private String perms; private Integer isDisable; - private Integer isDelete; private Long createTime; private Long updateTime; - private Long deleteTime; } diff --git a/like-common/src/main/java/com/hxkj/common/entity/system/SysRole.java b/like-common/src/main/java/com/hxkj/common/entity/system/SysRole.java index b217daaf..5ce4fcc8 100644 --- a/like-common/src/main/java/com/hxkj/common/entity/system/SysRole.java +++ b/like-common/src/main/java/com/hxkj/common/entity/system/SysRole.java @@ -19,11 +19,8 @@ public class SysRole implements Serializable { private String name; private String remark; private Integer sort; - private String menuIds; private Integer isDisable; - private Integer isDelete; private Long createTime; private Long updateTime; - private Long deleteTime; } diff --git a/like-common/src/main/java/com/hxkj/common/entity/system/SysRoleMenu.java b/like-common/src/main/java/com/hxkj/common/entity/system/SysRoleMenu.java index 999bef1a..43a8ccfe 100644 --- a/like-common/src/main/java/com/hxkj/common/entity/system/SysRoleMenu.java +++ b/like-common/src/main/java/com/hxkj/common/entity/system/SysRoleMenu.java @@ -1,8 +1,8 @@ package com.hxkj.common.entity.system; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import java.io.Serializable; @@ -10,13 +10,16 @@ import java.io.Serializable; * 系统角色菜单实体 */ @Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) public class SysRoleMenu implements Serializable { private static final long serialVersionUID = 1L; - @TableId(value="id", type= IdType.AUTO) - private Integer id; + // 角色ID private Integer roleId; + + // 菜单ID private Integer menuId; } diff --git a/like-common/src/main/java/com/hxkj/common/mapper/system/SysAdminMapper.java b/like-common/src/main/java/com/hxkj/common/mapper/system/SysAdminMapper.java index b7279cea..e3ae3bf0 100644 --- a/like-common/src/main/java/com/hxkj/common/mapper/system/SysAdminMapper.java +++ b/like-common/src/main/java/com/hxkj/common/mapper/system/SysAdminMapper.java @@ -1,14 +1,12 @@ package com.hxkj.common.mapper.system; -import com.github.yulichang.base.MPJBaseMapper; +import com.hxkj.common.basics.BaseMapper; import com.hxkj.common.entity.system.SysAdmin; import org.apache.ibatis.annotations.Mapper; -import java.util.List; - /** * 系统管理员 */ @Mapper -public interface SysAdminMapper extends MPJBaseMapper { +public interface SysAdminMapper extends BaseMapper { } diff --git a/like-common/src/main/java/com/hxkj/common/mapper/system/SysMenuMapper.java b/like-common/src/main/java/com/hxkj/common/mapper/system/SysMenuMapper.java index c4bd91de..1744d416 100644 --- a/like-common/src/main/java/com/hxkj/common/mapper/system/SysMenuMapper.java +++ b/like-common/src/main/java/com/hxkj/common/mapper/system/SysMenuMapper.java @@ -1,6 +1,6 @@ package com.hxkj.common.mapper.system; -import com.github.yulichang.base.MPJBaseMapper; +import com.hxkj.common.basics.BaseMapper; import com.hxkj.common.entity.system.SysMenu; import org.apache.ibatis.annotations.Mapper; @@ -8,5 +8,5 @@ import org.apache.ibatis.annotations.Mapper; * 系统菜单 */ @Mapper -public interface SysMenuMapper extends MPJBaseMapper { +public interface SysMenuMapper extends BaseMapper { } diff --git a/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMapper.java b/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMapper.java index 61d1b503..d0914869 100644 --- a/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMapper.java +++ b/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMapper.java @@ -1,6 +1,6 @@ package com.hxkj.common.mapper.system; -import com.github.yulichang.base.MPJBaseMapper; +import com.hxkj.common.basics.BaseMapper; import com.hxkj.common.entity.system.SysRole; import org.apache.ibatis.annotations.Mapper; @@ -8,5 +8,5 @@ import org.apache.ibatis.annotations.Mapper; * 系统角色 */ @Mapper -public interface SysRoleMapper extends MPJBaseMapper { +public interface SysRoleMapper extends BaseMapper { } diff --git a/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMenuMapper.java b/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMenuMapper.java new file mode 100644 index 00000000..de6807f7 --- /dev/null +++ b/like-common/src/main/java/com/hxkj/common/mapper/system/SysRoleMenuMapper.java @@ -0,0 +1,12 @@ +package com.hxkj.common.mapper.system; + +import com.hxkj.common.basics.BaseMapper; +import com.hxkj.common.entity.system.SysRoleMenu; +import org.apache.ibatis.annotations.Mapper; + +/** + * 角色菜单 + */ +@Mapper +public interface SysRoleMenuMapper extends BaseMapper { +} diff --git a/like-common/src/main/java/com/hxkj/common/utils/JwtUtil.java b/like-common/src/main/java/com/hxkj/common/utils/JwtUtil.java new file mode 100644 index 00000000..34a5b3ea --- /dev/null +++ b/like-common/src/main/java/com/hxkj/common/utils/JwtUtil.java @@ -0,0 +1,68 @@ +package com.hxkj.common.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTCreator; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; + +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +public class JwtUtil { + + /** + * 过期时间(秒) + */ + + private static final Integer expire = 7200; + + /** + * 加密密钥 + */ + + private static final String secret = "EEE"; + + /** + * 请求头字段名 + */ + + private static final String header = "token"; + + /** + * 创建token + * + * @author fzr + * @param map 参数 + */ + public static String createToken(Map map) { + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.SECOND, expire); + + JWTCreator.Builder builder = JWT.create(); + map.forEach(builder::withClaim); + return builder.withExpiresAt(instance.getTime()) + .withIssuedAt(new Date()) + .sign(Algorithm.HMAC256(secret)); + } + + /** + * token是否过期 + * @author fzr + * @param token token + */ + public void isTokenExpired(String token) { + JWT.require(Algorithm.HMAC256(secret)).build().verify(token); + } + + /** + * 获取token中的payload + * @author fzr + * @param token token + * @return DecodedJWT + */ + public static DecodedJWT getToken(String token) { + return JWT.require(Algorithm.HMAC256(secret)).build().verify(token); + } + +} diff --git a/pom.xml b/pom.xml index 04e14e66..2f19de27 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ 1.8.0 1.18.22 1.2.78 + 3.18.2 @@ -84,6 +85,12 @@ fastjson ${fastJson.version} + + + com.auth0 + java-jwt + ${java-jwt.version} +