ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @@ -15,63 +16,83 @@ @TableId private Long id; /** 企业用户id */ @Schema(description = "企业用户id") private Long userId; /** 公司名称 */ @Schema(description = "公司名称") private String companyName; /** 统一社会信用代码 */ @Schema(description = "统一社会信用代码") private String socialCode; /** 省份代码 */ @Schema(description = "省份代码") private String provinceCode; /** 城市代码 */ @Schema(description = "城市代码") private String cityCode; /** 区域代码 */ @Schema(description = "区域代码") private String districtCode; /**所在区域(省市区)*/ @Schema(description = "所在区域(省市区") private String area; /** 经营地址 */ @Schema(description = "经营地址") private String businessAddress; /** 身份证正面照片 */ @Schema(description = "身份证正面照片") private String idCardFrontUrl; /** 身份证反面照片 */ @Schema(description = "身份证反面照片") private String idCardBackUrl; /** 法人姓名 */ @Schema(description = "法人姓名") private String legalPersonName; /** 身份证号码 */ @Schema(description = "身份证号码") private String idCardNumber; /** 营业执照照片 */ @Schema(description = "营业执照照片") private String businessLicenseUrl; /** 资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书 */ @Schema(description = "资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书") private Integer category; /** 拆解企业资质证书图片地址 */ @Schema(description = "拆解企业资质证书图片地址") private String certificateUrl; /** 联系人姓名 */ @Schema(description = "联系人姓名") private String contactName; /** 联系人手机号 */ @Schema(description = "联系人手机号") private String contactPhone; /** 联系人邮箱 */ @Schema(description = "联系人邮箱") private String email; /** 创建时间 */ @Schema(description = "创建时间") private LocalDateTime createTime; /** 更新时间 */ @Schema(description = "更新时间") private LocalDateTime updateTime; /** 是否删除 */ ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/model/RegisterUser.java
@@ -4,7 +4,6 @@ import lombok.Data; @Data public class RegisterUser { @Schema(description = "账号名称") private String accountName; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/AppUser.java
@@ -20,7 +20,12 @@ private Integer status; /** 创建时间 */ private LocalDateTime loginTime; private Long loginTime; /** * 过期时间 */ private Long expireTime; public Long getUserId() { return userId; @@ -54,11 +59,11 @@ this.status = status; } public LocalDateTime getLoginTime() { public Long getLoginTime() { return loginTime; } public void setLoginTime(LocalDateTime loginTime) { public void setLoginTime(Long loginTime) { this.loginTime = loginTime; } @@ -69,4 +74,12 @@ public void setToken(String token) { this.token = token; } public Long getExpireTime() { return expireTime; } public void setExpireTime(Long expireTime) { this.expireTime = expireTime; } } ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -16,6 +16,7 @@ import com.ruoyi.company.api.model.RegisterUser; import com.ruoyi.system.api.model.AppUser; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; @@ -46,6 +47,7 @@ * @author ruoyi */ @RestController @Tag(name = "用户登录", description = "用户登录") public class TokenController { @Autowired @@ -131,6 +133,7 @@ } @PostMapping("companyLogin") @Operation(summary = "用户登录接口",description = "账号/手机号登录") public R<Map<String, Object>> companyLogin(@RequestBody RegisterUser registerUser) { // 用户登录 @@ -147,7 +150,7 @@ appUser.setUserId(user.getUserId()); appUser.setAccountName(appUser.getAccountName()); appUser.setPhone(appUser.getPhone()); appUser.setLoginTime(LocalDateTime.now()); appUser.setLoginTime(System.currentTimeMillis()); appUser.setToken(token); // 根据uuid将loginUser缓存 @@ -172,6 +175,7 @@ * @return */ @PostMapping("smsLogin") @Operation(summary = "验证码登录",description = "验证码登录") public R<Map<String, Object>> smsLogin(@RequestBody RegisterUser registerUser){ String smsCode = registerUser.getSmsCode(); if (!"999999".equals(smsCode)) { @@ -208,6 +212,7 @@ * 重置密码 */ @PostMapping("resetPwd") @Operation(summary = "重置密码",description = "重置密码") public R<?> resetPwd(@RequestBody RegisterUser registerUser) { sysLoginService.resetPwd(registerUser); ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -184,12 +184,10 @@ if (R.isError(userByPhoneR)) { throw new ServiceException(userByPhoneR.getMsg()); } if (userByPhoneR.getData() == null) { throw new ServiceException("账号不存在"); } if (SecurityUtils.matchesPassword(password, userByPhoneR.getData().getPassword())) { return userByPhoneR.getData(); if (userByPhoneR.getData() != null) { if (SecurityUtils.matchesPassword(password, userByPhoneR.getData().getPassword())) { return userByPhoneR.getData(); } } ruoyi-auth/src/main/resources/bootstrap.yml
@@ -15,6 +15,7 @@ discovery: # 服务注册地址 server-addr: 192.168.110.111:8848 ip: 192.168.110.111 config: # 配置中心地址 server-addr: 192.168.110.111:8848 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -44,6 +44,8 @@ */ public static final String LOGIN_USER = "login_user"; public static final String COMPANY_LOGIN_USER = "company_login_user"; /** * 角色权限 */ ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -3,6 +3,8 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; import com.ruoyi.system.api.model.AppUser; import org.springframework.util.PatternMatchUtils; import com.ruoyi.common.core.context.SecurityContextHolder; import com.ruoyi.common.core.exception.auth.NotLoginException; @@ -93,6 +95,11 @@ return tokenService.getLoginUser(token); } public AppUser getAppUser(String token) { return tokenService.getAppUser(token); } /** * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存 * @@ -103,6 +110,11 @@ tokenService.verifyToken(loginUser); } public void verifyLoginUserExpire(AppUser appUser) { tokenService.verifyToken(appUser); } /** * 验证用户是否具备某权限 * ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
@@ -2,6 +2,7 @@ import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.annotation.RequiresRoles; import com.ruoyi.system.api.model.AppUser; import com.ruoyi.system.api.model.LoginUser; /** @@ -53,6 +54,13 @@ return authLogic.getLoginUser(token); } public static AppUser getAppUser(String token) { return authLogic.getAppUser(token); } /** * 验证当前用户有效期 * @@ -63,6 +71,12 @@ authLogic.verifyLoginUserExpire(loginUser); } public static void verifyLoginUserExpire(AppUser appUser) { authLogic.verifyLoginUserExpire(appUser); } /** * 当前账号是否含有指定角色标识, 返回true或false * ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java
@@ -2,6 +2,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ruoyi.system.api.model.AppUser; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.AsyncHandlerInterceptor; import com.ruoyi.common.core.constant.SecurityConstants; @@ -41,6 +43,13 @@ AuthUtil.verifyLoginUserExpire(loginUser); SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser); } AppUser appUser = AuthUtil.getAppUser(token); if (StringUtils.isNotNull(appUser)) { AuthUtil.verifyLoginUserExpire(appUser); SecurityContextHolder.set(SecurityConstants.COMPANY_LOGIN_USER, appUser); } } return true; } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.AppUser; import com.ruoyi.system.api.model.LoginUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,6 +117,25 @@ return user; } public AppUser getAppUser(String token) { AppUser user = null; try { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKey(token); user = redisService.getCacheObject(getTokenKey(userkey)); return user; } } catch (Exception e) { log.error("获取用户信息异常'{}'", e.getMessage()); } return user; } /** * 设置用户身份信息 */ @@ -154,6 +174,16 @@ } } public void verifyToken(AppUser loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { refreshToken(loginUser); } } /** * 刷新令牌有效期 * @@ -168,6 +198,15 @@ redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); } public void refreshToken(AppUser appUser) { appUser.setLoginTime(System.currentTimeMillis()); appUser.setExpireTime(appUser.getLoginTime() + expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 String userKey = getTokenKey(appUser.getToken()); redisService.setCacheObject(userKey, appUser, expireTime, TimeUnit.MINUTES); } private String getTokenKey(String token) { return ACCESS_TOKEN + token; ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -1,6 +1,8 @@ package com.ruoyi.common.security.utils; import javax.servlet.http.HttpServletRequest; import com.ruoyi.system.api.model.AppUser; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.TokenConstants; @@ -48,6 +50,20 @@ return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class); } public static AppUser getAppLoginUser() { return SecurityContextHolder.get(SecurityConstants.COMPANY_LOGIN_USER, AppUser.class); } /** * 获取企业用户信息 */ public static AppUser getCompanyLoginUser() { return SecurityContextHolder.get(SecurityConstants.COMPANY_LOGIN_USER, AppUser.class); } /** * 获取请求token */ ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/CompanyController.java
@@ -3,8 +3,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.Company; import com.ruoyi.company.service.CompanyService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; @@ -28,4 +31,13 @@ .eq(Company::getUserId, userId)); return R.ok(list); } @Operation(summary = "获取当前用户企业详情") @GetMapping("/getCompanyDetail") public R<Company> getCompanyDetail(){ Long userId = SecurityUtils.getAppLoginUser().getUserId(); Company company = companyService.getOne(new LambdaQueryWrapper<Company>() .eq(Company::getUserId, userId)); return R.ok(company); } } ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/Sample.java
File was deleted ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/front/UserController.java
@@ -2,11 +2,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; import com.ruoyi.company.api.model.UserDetail; import com.ruoyi.company.service.UserService; import com.ruoyi.system.api.model.AppUser; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import lombok.experimental.StandardException; import org.springframework.context.annotation.Lazy; @@ -27,8 +31,13 @@ } @GetMapping("/getUserDetail") public R<UserDetail> getUserDetail(Long userId) { return R.ok(new UserDetail()); @Operation(summary = "获取用户详情",tags = {"企业端"}) public R<UserDetail> getUserDetail() { AppUser appLoginUser = SecurityUtils.getAppLoginUser(); User user = userService.getById(appLoginUser.getUserId()); UserDetail userDetail = new UserDetail(); BeanUtils.copyProperties(user, userDetail); return R.ok(userDetail); } @GetMapping("/getUserByAccountName") ruoyi-modules/ruoyi-company/src/main/resources/bootstrap.yml
@@ -15,6 +15,7 @@ discovery: # 服务注册地址 server-addr: 192.168.110.111:8848 ip: 192.168.110.111 config: # 配置中心地址 server-addr: 192.168.110.111:8848 ruoyi-ui/vue.config.js
@@ -36,7 +36,7 @@ proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { target: `http://192.168.110.80:9000`, target: `http://192.168.110.188:9000`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: ''