diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 7457288..312ddd7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -3,10 +3,7 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysMenu; @@ -91,4 +88,15 @@ public class SysLoginController List menus = menuService.selectMenuTreeByUserId(userId); return AjaxResult.success(menuService.buildMenus(menus)); } + @GetMapping("/sso/callback") + public String ssoCallback(@RequestParam("ticket") String ticket) { + String frontendIndexUrl = "http://domain.com"; + + String ruoyiJwtToken = loginService.loginOss(ticket); + + String redirectUrl = frontendIndexUrl + "/index?token=" + ruoyiJwtToken; + + // 返回 "redirect:" 即可触发 302 重定向 + return "redirect:" + redirectUrl; + } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java index d8ed998..827d5dd 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java @@ -1,6 +1,6 @@ package com.ruoyi.cms.controller.app; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.domain.Company; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobFair; @@ -10,7 +10,7 @@ import com.ruoyi.common.annotation.BussinessLog; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -50,7 +50,7 @@ public class AppUserController extends BaseController @BussinessLog(title = "保存简历") public AjaxResult saveResume(@RequestBody AppUser appUser) { - appUser.setUserId(SecurityUtils.getUserId()); + appUser.setUserId(SiteSecurityUtils.getUserId()); appUserService.updateAppUser(appUser); return AjaxResult.success(); } @@ -58,7 +58,7 @@ public class AppUserController extends BaseController @GetMapping("/resume") public AjaxResult getResume() { - AppUser appUser = appUserService.selectAppUserByUserId(SecurityUtils.getUserId()); + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); return AjaxResult.success(appUser); } @ApiOperation("我的浏览") diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java index 39c8b12..2c2f2fd 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java @@ -18,7 +18,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.service.IAppUserService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java index ff9eb46..52c4e9d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/CandidateVO.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import lombok.Data; import java.util.Date; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java index 29fcbbf..350ed83 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/AppUserMapper.java @@ -2,7 +2,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; /** * APP用户Mapper接口 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java index 21cc1de..d226ece 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/IAppUserService.java @@ -1,7 +1,7 @@ package com.ruoyi.cms.service; import java.util.List; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; /** * APP用户Service接口 diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppNoticeServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppNoticeServiceImpl.java index 0a5a898..09ac34d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppNoticeServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppNoticeServiceImpl.java @@ -6,11 +6,11 @@ import com.ruoyi.cms.domain.*; import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.service.IAppNoticeService; import com.ruoyi.cms.util.StringUtil; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -154,14 +154,14 @@ public class AppNoticeServiceImpl implements IAppNoticeService @Override public List listNotRead(Integer isRead) { - Long userId = SecurityUtils.getUserId(); + Long userId = SiteSecurityUtils.getUserId(); List sysNoticeList = noticeInfoMapper.selectList(Wrappers.lambdaQuery().eq(Notice::getUserId, userId).eq(Notice::getRemark,"notice_bar").orderByDesc(Notice::getCreateTime)); return sysNoticeList; } @Override public List recommend(String jobTitle) { - return appNoticeMapper.recommend(jobTitle,SecurityUtils.getUserId()); + return appNoticeMapper.recommend(jobTitle,SiteSecurityUtils.getUserId()); } @Override @@ -172,7 +172,7 @@ public class AppNoticeServiceImpl implements IAppNoticeService notice.setIsRead(1); noticeInfoMapper.updateById(notice); }); - List notices1 = noticeInfoMapper.selectList(Wrappers.lambdaQuery().eq(Notice::getUserId, SecurityUtils.getUserId()).eq(Notice::getRemark, "notice_bar").eq(Notice::getTitle, "系统通知").orderByDesc(Notice::getCreateTime).last("limit 1")); + List notices1 = noticeInfoMapper.selectList(Wrappers.lambdaQuery().eq(Notice::getUserId, SiteSecurityUtils.getUserId()).eq(Notice::getRemark, "notice_bar").eq(Notice::getTitle, "系统通知").orderByDesc(Notice::getCreateTime).last("limit 1")); Notice notice = notices1.get(0); notice.setNotReadCount(notice.getNotReadCount() - longs.size()); if(notice.getNotReadCount()==0){ @@ -194,7 +194,7 @@ public class AppNoticeServiceImpl implements IAppNoticeService @Override public List sysNoticeList() { - Long userId = SecurityUtils.getUserId(); + Long userId = SiteSecurityUtils.getUserId(); List sysNoticeList = noticeInfoMapper.selectList(Wrappers.lambdaQuery().eq(Notice::getUserId, userId).isNotNull(Notice::getNoticeType).notIn(Notice::getNoticeType,"").orderByDesc(Notice::getCreateTime)); return sysNoticeList; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppReviewJobServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppReviewJobServiceImpl.java index 56c5ff7..ced8374 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppReviewJobServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppReviewJobServiceImpl.java @@ -6,7 +6,7 @@ import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.query.MineJobQuery; import com.ruoyi.cms.mapper.AppReviewJobMapper; import com.ruoyi.cms.service.IAppReviewJobService; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -91,13 +91,13 @@ public class AppReviewJobServiceImpl extends ServiceImpl review(MineJobQuery jobQuery) { - List jobs = appReviewJobMapper.review(SecurityUtils.getUserId(),jobQuery); + List jobs = appReviewJobMapper.review(SiteSecurityUtils.getUserId(),jobQuery); return jobs; } @Override public List reviewArray() { - List appReviewJobs = appReviewJobMapper.reviewArray(SecurityUtils.getUserId()); + List appReviewJobs = appReviewJobMapper.reviewArray(SiteSecurityUtils.getUserId()); return appReviewJobs.stream().map(x -> formatter.format(x.getReviewDate())).collect(Collectors.toList()); } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java index 74e7768..0df2df7 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AppUserServiceImpl.java @@ -12,7 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import com.ruoyi.cms.mapper.AppUserMapper; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.service.IAppUserService; /** diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCardServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCardServiceImpl.java index c646873..d2a5b72 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCardServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCardServiceImpl.java @@ -11,7 +11,7 @@ import com.ruoyi.cms.domain.CompanyCardCollection; import com.ruoyi.cms.domain.vo.CompanyCardVO; import com.ruoyi.cms.mapper.CompanyCardCollectionMapper; import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -100,9 +100,9 @@ public class CompanyCardServiceImpl extends ServiceImpl companyCards = companyCardMapper.selectCompanyCardListVO(companyCard); - if(SecurityUtils.isLogin()){ + if(SiteSecurityUtils.isLogin()){ CompanyCardCollection companyCardCollection = new CompanyCardCollection(); - companyCardCollection.setUserId(SecurityUtils.getUserId()); + companyCardCollection.setUserId(SiteSecurityUtils.getUserId()); List companyCardCollections = companyCardCollectionMapper.selectCompanyCardCollectionList(companyCardCollection); for (CompanyCardVO item:companyCards){ for(CompanyCardCollection collection:companyCardCollections){ @@ -119,7 +119,7 @@ public class CompanyCardServiceImpl extends ServiceImpl companyCardCollections = companyCardCollectionMapper.selectList(Wrappers.lambdaQuery().eq(CompanyCardCollection::getCompanyCardId, companyCardId).eq(CompanyCardCollection::getUserId, SecurityUtils.getUserId())); + companyCardCollection.setUserId(SiteSecurityUtils.getUserId()); + List companyCardCollections = companyCardCollectionMapper.selectList(Wrappers.lambdaQuery().eq(CompanyCardCollection::getCompanyCardId, companyCardId).eq(CompanyCardCollection::getUserId, SiteSecurityUtils.getUserId())); companyCardCollectionMapper.deleteBatchIds(companyCardCollections.stream().map(CompanyCardCollection::getCompanyCardCollectionId).collect(Collectors.toList())); } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java index ac6ce81..94d6b84 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyCollectionServiceImpl.java @@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.cms.domain.Company; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.mapper.JobMapper; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -93,7 +93,7 @@ public class CompanyCollectionServiceImpl extends ServiceImpl companyCollections = companyCollectionMapper.selectList(Wrappers.lambdaQuery().eq(CompanyCollection::getCompanyId, companyId).eq(CompanyCollection::getUserId, SecurityUtils.getUserId())); + List companyCollections = companyCollectionMapper.selectList(Wrappers.lambdaQuery().eq(CompanyCollection::getCompanyId, companyId).eq(CompanyCollection::getUserId, SiteSecurityUtils.getUserId())); if(companyCollections.size()>0){ companyCollectionMapper.deleteBatchIds(companyCollections.stream().map(CompanyCollection::getId).collect(Collectors.toList())); } @@ -104,7 +104,7 @@ public class CompanyCollectionServiceImpl extends ServiceImpl companyCollections = companyCollectionMapper.selectList(Wrappers.lambdaQuery().eq(CompanyCollection::getCompanyId, companyId).eq(CompanyCollection::getUserId, userId)); if(companyCollections.size()>0){ companyCollectionMapper.deleteBatchIds(companyCollections.stream().map(CompanyCollection::getId).collect(Collectors.toList())); @@ -118,7 +118,7 @@ public class CompanyCollectionServiceImpl extends ServiceImpl collectionCompany() { - List companies = companyCollectionMapper.collectionJob(SecurityUtils.getUserId()); + List companies = companyCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()); return companies; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java index c6592c4..4db5552 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/CompanyServiceImpl.java @@ -11,7 +11,7 @@ import com.ruoyi.cms.domain.query.LabelQuery; import com.ruoyi.cms.mapper.*; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -53,8 +53,8 @@ public class CompanyServiceImpl extends ServiceImpl imple public Company selectCompanyByCompanyId(Long companyId) { Company company = companyMapper.selectById(companyId); - if(SecurityUtils.isLogin()){ - Long l = companyCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(CompanyCollection::getCompanyId, companyId).eq(CompanyCollection::getUserId, SecurityUtils.getUserId())); + if(SiteSecurityUtils.isLogin()){ + Long l = companyCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(CompanyCollection::getCompanyId, companyId).eq(CompanyCollection::getUserId, SiteSecurityUtils.getUserId())); company.setIsCollection(l>0?1:0); }else { company.setIsCollection(0); @@ -241,7 +241,7 @@ public class CompanyServiceImpl extends ServiceImpl imple @Override public void register(Company company) { - Long userId = SecurityUtils.getUserId(); + Long userId = SiteSecurityUtils.getUserId(); company.setUserId(userId); if(companyMapper.selectCount(Wrappers.lambdaQuery().eq(Company::getName, company.getName()).in(Company::getStatus,Arrays.asList(0,1)))>0){ throw new ServiceException(company.getName()+"已经存在"); @@ -251,7 +251,7 @@ public class CompanyServiceImpl extends ServiceImpl imple @Override public Company registerStatus() { - Long userId = SecurityUtils.getUserId(); + Long userId = SiteSecurityUtils.getUserId(); Company company = companyMapper.selectOne(Wrappers.lambdaQuery().eq(Company::getUserId, userId).orderByDesc(Company::getUpdateTime)); return company; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index b69b223..cc142ef 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -1,18 +1,16 @@ package com.ruoyi.cms.service.impl; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.domain.ESJobDocument; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.query.ESJobSearch; import com.ruoyi.cms.mapper.es.EsJobDocumentMapper; import com.ruoyi.cms.mapper.JobMapper; import com.ruoyi.cms.service.IESJobSearchService; -import com.ruoyi.cms.util.Base64Util; import com.ruoyi.cms.util.ListUtil; import com.ruoyi.cms.util.StringUtil; import com.ruoyi.common.core.text.Convert; -import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import org.dromara.easyes.core.biz.EsPageInfo; import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper; @@ -140,8 +138,8 @@ public class ESJobSearchImpl implements IESJobSearchService ESJobSearch newSearch = new ESJobSearch(); BeanUtils.copyProperties(esJobSearch,newSearch); //查询 - if(SecurityUtils.isLogin()){ - AppUser appUser = appUserService.selectAppUserByUserId(SecurityUtils.getUserId()); + if(SiteSecurityUtils.isLogin()){ + AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); if(!ListUtil.isEmptyOrNull(appUser.getJobTitle())){ List jobTitle = appUser.getJobTitle(); newSearch.setJobTitle(String.join(",", jobTitle)); @@ -424,8 +422,8 @@ public class ESJobSearchImpl implements IESJobSearchService Integer pageNum = jobQuery.getCurrent(); Integer pageSize = jobQuery.getPageSize(); LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); -// if(SecurityUtils.isLogin()){ -// AppUser appUser = appUserService.selectAppUserByUserId(SecurityUtils.getUserId()); +// if(SiteSecurityUtils.isLogin()){ +// AppUser appUser = appUserService.selectAppUserByUserId(SiteSecurityUtils.getUserId()); // if(!ListUtil.isEmptyOrNull(appUser.getJobTitle())){ // List jobTitle = appUser.getJobTitle(); // jobQuery.setJobTitle(String.join(",", jobTitle)); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java index cb8f197..f0d0fae 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FairCollectionServiceImpl.java @@ -8,7 +8,7 @@ import com.ruoyi.cms.domain.JobFair; import com.ruoyi.cms.mapper.FairCollectionMapper; import com.ruoyi.cms.mapper.JobFairMapper; import com.ruoyi.cms.service.IFairCollectionService; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,7 +50,7 @@ public class FairCollectionServiceImpl extends ServiceImpl selectFairCollectionList(FairCollection fairCollection) { - List fairCollections = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getUserId, SecurityUtils.getUserId())); + List fairCollections = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getUserId, SiteSecurityUtils.getUserId())); return fairCollections; } @@ -95,7 +95,7 @@ public class FairCollectionServiceImpl extends ServiceImpl fairCollections = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getFairId, fairId).eq(FairCollection::getUserId, userId)); if(fairCollections.size()>0){ fairCollectionMapper.deleteBatchIds(fairCollections.stream().map(FairCollection::getId).collect(Collectors.toList())); @@ -111,7 +111,7 @@ public class FairCollectionServiceImpl extends ServiceImpl fairCollections = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getFairId, fairId).eq(FairCollection::getUserId, userId)); if(fairCollections.size()>0){ fairCollectionMapper.deleteBatchIds(fairCollections.stream().map(FairCollection::getId).collect(Collectors.toList())); @@ -123,6 +123,6 @@ public class FairCollectionServiceImpl extends ServiceImpl appCollectionFair(Integer type) { - return jobFairMapper.selectAppList(SecurityUtils.getUserId(),type); + return jobFairMapper.selectAppList(SiteSecurityUtils.getUserId(),type); } } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java index 4956e77..6762867 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/FileServiceImpl.java @@ -12,7 +12,7 @@ import com.ruoyi.cms.mapper.FileMapper; import com.ruoyi.cms.service.IFileService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.utils.uuid.UUID; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java index 5197bce..465f664 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobApplyServiceImpl.java @@ -8,7 +8,7 @@ import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.query.MineJobQuery; import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.service.IJobApplyService; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -98,17 +98,17 @@ public class JobApplyServiceImpl extends ServiceImpl im @Override public List applyJob() { - List jobs = jobApplyMapper.applyJob(SecurityUtils.getUserId()); + List jobs = jobApplyMapper.applyJob(SiteSecurityUtils.getUserId()); return jobs; } @Override public HashMap statistics() { - Integer applyCount = jobApplyMapper.applyJob(SecurityUtils.getUserId()).size(); - Integer collectionJobCount = jobCollectionMapper.collectionJob(SecurityUtils.getUserId()).size(); - Integer collectionCompanyCount = companyCollectionMapper.collectionJob(SecurityUtils.getUserId()).size(); - Integer jobReviewCount = appReviewJobMapper.review(SecurityUtils.getUserId(),new MineJobQuery()).size(); - Integer fairCollecitonCount = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getUserId, SecurityUtils.getUserId())).size(); + Integer applyCount = jobApplyMapper.applyJob(SiteSecurityUtils.getUserId()).size(); + Integer collectionJobCount = jobCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()).size(); + Integer collectionCompanyCount = companyCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()).size(); + Integer jobReviewCount = appReviewJobMapper.review(SiteSecurityUtils.getUserId(),new MineJobQuery()).size(); + Integer fairCollecitonCount = fairCollectionMapper.selectList(Wrappers.lambdaQuery().eq(FairCollection::getUserId, SiteSecurityUtils.getUserId())).size(); HashMap map = new HashMap<>(); map.put("applyCount", applyCount); map.put("collectionCount", collectionJobCount+collectionCompanyCount); diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java index 3f33709..d6bc20d 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java @@ -14,7 +14,8 @@ import com.ruoyi.cms.mapper.AppUserMapper; import com.ruoyi.cms.mapper.JobApplyMapper; import com.ruoyi.cms.mapper.JobMapper; import com.ruoyi.cms.service.IBussinessDictTypeService; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -106,7 +107,7 @@ public class JobCollectionServiceImpl extends ServiceImpl jobCollections = jobCollectionMapper.selectList(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, userId)); if(jobCollections.size()>0){ jobCollectionMapper.deleteBatchIds(jobCollections.stream().map(JobCollection::getId).collect(Collectors.toList())); @@ -122,7 +123,7 @@ public class JobCollectionServiceImpl extends ServiceImpl jobCollections = jobCollectionMapper.selectList(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, userId)); if(jobCollections.size()>0){ jobCollectionMapper.deleteBatchIds(jobCollections.stream().map(JobCollection::getId).collect(Collectors.toList())); @@ -132,7 +133,7 @@ public class JobCollectionServiceImpl extends ServiceImpl collectionJob() { - List jobs = jobCollectionMapper.collectionJob(SecurityUtils.getUserId()); + List jobs = jobCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()); return jobs; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java index 4457860..748634a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobFairServiceImpl.java @@ -10,7 +10,7 @@ import com.ruoyi.cms.mapper.FairCollectionMapper; import com.ruoyi.cms.mapper.FairCompanyMapper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -148,8 +148,8 @@ public class JobFairServiceImpl extends ServiceImpl imple List companyList = companyMapper.selectBatchIds(companyIds); jobFair.setCompanyList(companyList); } - if(SecurityUtils.isLogin()){ - Long count = fairCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(FairCollection::getFairId, fairId).eq(FairCollection::getUserId, SecurityUtils.getUserId())); + if(SiteSecurityUtils.isLogin()){ + Long count = fairCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(FairCollection::getFairId, fairId).eq(FairCollection::getUserId, SiteSecurityUtils.getUserId())); jobFair.setIsCollection(count>0?1:null); } return jobFair; @@ -159,10 +159,10 @@ public class JobFairServiceImpl extends ServiceImpl imple public List appList(JobFair jobFair) { List fairCompanies = jobFairMapper.appList(jobFair); if(fairCompanies.isEmpty()){return new ArrayList<>();} - if(SecurityUtils.isLogin()){ + if(SiteSecurityUtils.isLogin()){ //收藏 Set collectionIds = fairCollectionMapper.selectList(Wrappers.lambdaQuery() - .eq(FairCollection::getUserId, SecurityUtils.getUserId()) + .eq(FairCollection::getUserId, SiteSecurityUtils.getUserId()) .in(FairCollection::getFairId, fairCompanies.stream().map(JobFair::getJobFairId).collect(Collectors.toList()))) .stream().map(FairCollection::getFairId).collect(Collectors.toSet()); for (JobFair j : fairCompanies) { diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobRecommentServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobRecommentServiceImpl.java index 54408c5..5e0ec3e 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobRecommentServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobRecommentServiceImpl.java @@ -2,16 +2,15 @@ package com.ruoyi.cms.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.cms.domain.AppUser; +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.cms.domain.Job; import com.ruoyi.cms.domain.JobApply; import com.ruoyi.cms.domain.JobCollection; import com.ruoyi.cms.mapper.AppUserMapper; import com.ruoyi.cms.mapper.JobApplyMapper; import com.ruoyi.cms.mapper.JobCollectionMapper; -import com.ruoyi.cms.service.IJobCollectionService; import com.ruoyi.cms.service.IJobRecommentService; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -100,7 +99,7 @@ public class JobRecommentServiceImpl extends ServiceImpl jobCollections = jobCollectionMapper.selectList(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, userId)); if(jobCollections.size()>0){ jobCollectionMapper.deleteBatchIds(jobCollections.stream().map(JobCollection::getId).collect(Collectors.toList())); @@ -116,7 +115,7 @@ public class JobRecommentServiceImpl extends ServiceImpl jobCollections = jobCollectionMapper.selectList(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, userId)); if(jobCollections.size()>0){ jobCollectionMapper.deleteBatchIds(jobCollections.stream().map(JobCollection::getId).collect(Collectors.toList())); @@ -126,7 +125,7 @@ public class JobRecommentServiceImpl extends ServiceImpl collectionJob() { - List jobs = jobCollectionMapper.collectionJob(SecurityUtils.getUserId()); + List jobs = jobCollectionMapper.collectionJob(SiteSecurityUtils.getUserId()); return jobs; } @Override public String competitiveness(Long jobId) { - AppUser appUser = appUserMapper.selectById(SecurityUtils.getUserId()); + AppUser appUser = appUserMapper.selectById(SiteSecurityUtils.getUserId()); String education = appUser.getEducation(); return "90.5"; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java index 5cb8f04..4e11b7a 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java @@ -19,7 +19,7 @@ import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.JobTitle; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.spring.SpringUtils; import org.dromara.easyes.core.biz.EsPageInfo; import org.slf4j.Logger; @@ -369,22 +369,22 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe Company company = companyMapper.selectById(job.getCompanyId()); job.setCompany(company); } - if(SecurityUtils.isLogin()){ + if(SiteSecurityUtils.isLogin()){ //查询申请信息 - Long applyCount = jobApplyMapper.selectCount(Wrappers.lambdaQuery().eq(JobApply::getJobId, jobId).eq(JobApply::getUserId, SecurityUtils.getUserId())); + Long applyCount = jobApplyMapper.selectCount(Wrappers.lambdaQuery().eq(JobApply::getJobId, jobId).eq(JobApply::getUserId, SiteSecurityUtils.getUserId())); job.setIsApply(applyCount>0?1:0); //查询收藏信息 - Long collectionCount = jobCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, SecurityUtils.getUserId())); + Long collectionCount = jobCollectionMapper.selectCount(Wrappers.lambdaQuery().eq(JobCollection::getJobId, jobId).eq(JobCollection::getUserId, SiteSecurityUtils.getUserId())); job.setIsCollection(collectionCount>0?1:0); //todo asyn //保存浏览记录 - List appReviewJobs = appReviewJobMapper.selectList(Wrappers.lambdaQuery().eq(AppReviewJob::getUserId, SecurityUtils.getUserId()).eq(AppReviewJob::getJobId, jobId)); + List appReviewJobs = appReviewJobMapper.selectList(Wrappers.lambdaQuery().eq(AppReviewJob::getUserId, SiteSecurityUtils.getUserId()).eq(AppReviewJob::getJobId, jobId)); //之前相同岗位的记录删除 保存最新的浏览记录 if(!appReviewJobs.isEmpty()){ appReviewJobMapper.deleteBatchIds(appReviewJobs.stream().map(AppReviewJob::getId).collect(Collectors.toList())); } AppReviewJob appReviewJob = new AppReviewJob(); - appReviewJob.setUserId(SecurityUtils.getUserId()); + appReviewJob.setUserId(SiteSecurityUtils.getUserId()); LocalDateTime now = LocalDateTime.now(); String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); appReviewJob.setReviewDate(formattedDate); @@ -749,10 +749,10 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe private List userCollection(List jobs){ if(jobs.isEmpty()){return new ArrayList<>();} - if(SecurityUtils.isLogin()){ + if(SiteSecurityUtils.isLogin()){ //收藏 Set collectionIds = jobCollectionMapper.selectList(Wrappers.lambdaQuery() - .eq(JobCollection::getUserId, SecurityUtils.getUserId()) + .eq(JobCollection::getUserId, SiteSecurityUtils.getUserId()) .in(JobCollection::getJobId, jobs.stream().map(ESJobDocument::getJobId).collect(Collectors.toList()))) .stream().map(JobCollection::getJobId).collect(Collectors.toSet()); for (ESJobDocument j : jobs) { @@ -767,7 +767,7 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe @Override public void publishJob(Job job) { job.setIsPublish(0); - Long userId = SecurityUtils.getUserId(); + Long userId = SiteSecurityUtils.getUserId(); Company company = companyMapper.selectOne(Wrappers.lambdaQuery().eq(Company::getUserId, userId).eq(Company::getStatus, 1)); if(Objects.isNull(company)){ throw new ServiceException("请先完成招聘企业登记"); diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml index 6cccb4b..7b2a3fb 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/AppUserMapper.xml @@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and id_card like concat('%', CAST(#{idCard} AS VARCHAR), '%') - SELECT * FROM app_user WHERE user_id IN ( select DISTINCT au.USER_ID from APP_USER au INNER JOIN JOB_APPLY ja ON ja.USER_ID = au.USER_ID diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 5ed99bc..2dde81d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -2,7 +2,7 @@ package com.ruoyi.common.constant; /** * 缓存的key 常量 - * + * * @author ruoyi */ public class CacheConstants @@ -11,11 +11,12 @@ public class CacheConstants * 登录用户 redis key */ public static final String LOGIN_TOKEN_KEY = "login_tokens:"; - + public static final String SITE_LOGIN_TOKEN_KEY = "site_login_tokens:"; /** * 验证码 redis key */ public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + public static final String SMG_CODE_KEY = "smg_codes:"; /** * 参数管理 cache key @@ -42,4 +43,5 @@ public class CacheConstants * 登录账户密码错误次数 redis key */ public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; + public static final String PWD_ERR_CNT_KEY_SITE = "site:pwd_err_cnt:"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 2795ea3..6bc7e06 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -5,7 +5,7 @@ import io.jsonwebtoken.Claims; /** * 通用常量信息 - * + * * @author ruoyi */ public class Constants @@ -109,6 +109,10 @@ public class Constants * 令牌前缀 */ public static final String LOGIN_USER_KEY = "login_user_key"; + public static final String APP_LOGIN_USER_KEY = "app_login_user_key"; + public static final String LOGIN_USER_ID = "login_user_id"; + public static final String APP_LOGIN_USER_ID = "login_user_id"; + public static final String EXP = "exp"; /** * 用户ID diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java similarity index 95% rename from ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUser.java rename to ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java index 59162ce..5a32890 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/AppUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/AppUser.java @@ -1,4 +1,4 @@ -package com.ruoyi.cms.domain; +package com.ruoyi.common.core.domain.entity; import java.util.Date; import java.util.List; @@ -109,4 +109,8 @@ public class AppUser extends BaseEntity @ApiModelProperty("是否企业用户 0是,1否") private String isCompanyUser; + + @TableField(exist = false) + @ApiModelProperty("密码") + private String password; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginSiteUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginSiteUser.java new file mode 100644 index 0000000..d38dd54 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginSiteUser.java @@ -0,0 +1,226 @@ +package com.ruoyi.common.core.domain.model; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.ruoyi.common.core.domain.entity.AppUser; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; + +/** + * 登录用户身份权限 + * + * @author ruoyi + */ +public class LoginSiteUser implements UserDetails +{ + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 用户信息 + */ + private AppUser user; + + public LoginSiteUser(){ + + } + public LoginSiteUser(Long userId, AppUser user){ + this.userId = userId; + this.user = user; + } + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + @JSONField(serialize = false) + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isEnabled() + { + return true; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + + public AppUser getUser() + { + return user; + } + + public void setUser(AppUser user) + { + this.user = user; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java new file mode 100644 index 0000000..5ba0ce6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SiteSecurityUtils.java @@ -0,0 +1,122 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.model.LoginSiteUser; +import com.ruoyi.common.exception.ServiceException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * 安全服务工具类 + * + * @author ruoyi + */ +public class SiteSecurityUtils +{ + + /** + * 用户ID + **/ + public static Long getUserId() + { + try + { + return getLoginSiteUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } + + + /** + * 获取用户账户 + **/ + public static String getUsername() + { + try + { + return getLoginSiteUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取用户 + **/ + public static LoginSiteUser getLoginSiteUser() + { + try + { + return (LoginSiteUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * @return 加密字符串 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * @return 结果 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + public static Boolean isLogin(){ + try + { + Object principal = getAuthentication().getPrincipal(); + if(principal.toString().equals("anonymousUser")){ + return false; + }else { + return true; + } + } catch (Exception e) + { + return false; + } + } + + public static LoginSiteUser getLoginUser() { + try + { + return (LoginSiteUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java index 3eb2495..ead860d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -5,6 +5,10 @@ import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.common.core.domain.model.LoginSiteUser; +import com.ruoyi.common.utils.SiteSecurityUtils; +import com.ruoyi.framework.web.service.TokenSiteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; @@ -27,11 +31,14 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter @Autowired private TokenService tokenService; + @Autowired + private TokenSiteService tokenSiteService; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { LoginUser loginUser = tokenService.getLoginUser(request); + LoginSiteUser loginSiteUser = tokenSiteService.getLoginSiteUser(request); if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) { tokenService.verifyToken(loginUser); @@ -39,6 +46,13 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authenticationToken); } + if (StringUtils.isNotNull(loginSiteUser) && StringUtils.isNull(SiteSecurityUtils.getAuthentication())) + { + tokenSiteService.verifyToken(loginSiteUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginSiteUser, null,loginSiteUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } chain.doFilter(request, response); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java index 2f89a91..80294be 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -4,6 +4,9 @@ import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.common.core.domain.model.LoginSiteUser; +import com.ruoyi.framework.web.service.TokenSiteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.Authentication; @@ -29,7 +32,8 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { @Autowired private TokenService tokenService; - + @Autowired + private TokenSiteService tokenSiteService; /** * 退出处理 * @@ -48,6 +52,15 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler // 记录用户退出日志 AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); } + LoginSiteUser loginSiteUser = tokenSiteService.getLoginSiteUser(request); + if (StringUtils.isNotNull(loginSiteUser)) + { + String userName = loginSiteUser.getUsername(); + // 删除用户缓存记录 + tokenSiteService.delLoginSiteUser(loginSiteUser.getToken()); + // 记录用户退出日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success")))); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 880d7e7..de54348 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -1,6 +1,9 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; + +import com.ruoyi.common.core.domain.entity.AppUser; +import com.ruoyi.common.core.domain.model.LoginSiteUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -52,6 +55,8 @@ public class SysLoginService @Autowired private ISysConfigService configService; + @Autowired + private TokenSiteService tokenSiteService; /** * 登录验证 * @@ -99,41 +104,24 @@ public class SysLoginService // 生成token return tokenService.createToken(loginUser); } + //模拟登录 public String loginApp(String username, String password) { - // 登录前置校验 - loginPreCheck(username, password); - // 用户验证 - Authentication authentication = null; - try - { - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); - AuthenticationContextHolder.setContext(authenticationToken); - // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername - authentication = authenticationManager.authenticate(authenticationToken); - } - catch (Exception e) - { - if (e instanceof BadCredentialsException) - { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); - throw new UserPasswordNotMatchException(); - } - else - { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); - throw new ServiceException(e.getMessage()); - } - } - finally - { - AuthenticationContextHolder.clearContext(); - } + + AppUser appUser = userService.selectAppUserById(1L); + LoginSiteUser loginSiteUser = new LoginSiteUser(); + loginSiteUser.setUserId(appUser.getUserId()); + loginSiteUser.setUser(appUser); + recordLoginInfo(appUser); AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); - LoginUser loginUser = (LoginUser) authentication.getPrincipal(); - recordLoginInfo(loginUser.getUserId()); + recordLoginInfo(appUser); // 生成token - return tokenService.createToken(loginUser); + return tokenSiteService.createToken(loginSiteUser); + } + //单点登录 + public String loginOss(String ticket) + { + return "tokenService.createToken(loginUser)"; } /** * 校验验证码 @@ -163,7 +151,15 @@ public class SysLoginService } } } - + public void recordLoginInfo(AppUser user) + { + AppUser sysUser = new AppUser(); + sysUser.setUserId(user.getUserId()); + sysUser.setLoginIp(IpUtils.getIpAddr()); + sysUser.setLoginDate(DateUtils.getNowDate()); + sysUser.setUpdateBy(user.getName()); +// userService.updateSiteUser(sysUser); + } /** * 登录前置校验 * @param username 用户名 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenSiteService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenSiteService.java new file mode 100644 index 0000000..002ed86 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenSiteService.java @@ -0,0 +1,242 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.model.LoginSiteUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * token验证处理 + * + * @author ruoyi + */ +@Component +public class TokenSiteService +{ + private static final Logger log = LoggerFactory.getLogger(TokenSiteService.class); + + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + // 令牌秘钥 + @Value("${token.secret}") + private String secret; + + @Value("${token.expireTime}") + private int expireTime; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginSiteUser getLoginSiteUser(HttpServletRequest request) + { + // 获取请求携带的令牌 + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) + { + try + { + Claims claims = parseToken(token); + // 解析对应的权限以及用户信息 + String uuid = (String) claims.get(Constants.APP_LOGIN_USER_KEY); + Integer userID = (Integer) claims.get(Constants.APP_LOGIN_USER_ID); + String userKey = getTokenKey(uuid, String.valueOf(userID)); + LoginSiteUser user = redisCache.getCacheObject(userKey); + return user; + } + catch (Exception e) + { + log.error("获取用户信息异常'{}'", e.getMessage()); + } + } + return null; + } + + /** + * 设置用户身份信息 + */ + public void setLoginSiteUser(LoginSiteUser LoginSiteUser) + { + if (StringUtils.isNotNull(LoginSiteUser) && StringUtils.isNotEmpty(LoginSiteUser.getToken())) + { + refreshToken(LoginSiteUser); + } + } + + /** + * 删除用户身份信息 + */ + public void delLoginSiteUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String userKey = getTokenKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 创建令牌 + * + * @param LoginSiteUser 用户信息 + * @return 令牌 + */ + public String createToken(LoginSiteUser LoginSiteUser) + { + String token = IdUtils.fastUUID(); + LoginSiteUser.setToken(token); + setUserAgent(LoginSiteUser); + refreshToken(LoginSiteUser); + + Map claims = new HashMap<>(); + claims.put(Constants.APP_LOGIN_USER_KEY, token); + claims.put(Constants.APP_LOGIN_USER_ID, LoginSiteUser.getUserId()); + // 当前时间 + 30 分钟 + long currentTimeMillis = System.currentTimeMillis(); + long expireTimeMillis = currentTimeMillis + ((long) expireTime * 60 * 1000); // 30分钟 = 1800000 毫秒 + long expireTimeSeconds = expireTimeMillis / 1000; // 转换为秒(时间戳) + claims.put(Constants.EXP, expireTimeSeconds); + return createToken(claims); + } + + /** + * 验证令牌有效期,相差不足20分钟,自动刷新缓存 + * + * @param LoginSiteUser + * @return 令牌 + */ + public void verifyToken(LoginSiteUser LoginSiteUser) + { + long expireTime = LoginSiteUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) + { + refreshToken(LoginSiteUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param LoginSiteUser 登录信息 + */ + public void refreshToken(LoginSiteUser LoginSiteUser) + { + LoginSiteUser.setLoginTime(System.currentTimeMillis()); + LoginSiteUser.setExpireTime(LoginSiteUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将LoginSiteUser缓存 + String userKey = getTokenKey(LoginSiteUser.getToken(), String.valueOf(LoginSiteUser.getUserId())); + redisCache.setCacheObject(userKey, LoginSiteUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 设置用户代理信息 + * + * @param LoginSiteUser 登录信息 + */ + public void setUserAgent(LoginSiteUser LoginSiteUser) + { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(); + LoginSiteUser.setIpaddr(ip); + LoginSiteUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + LoginSiteUser.setBrowser(userAgent.getBrowser().getName()); + LoginSiteUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + private String createToken(Map claims) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + private Claims parseToken(String token) + { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public String getUsernameFromToken(String token) + { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 获取请求token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) + { + String token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) + { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + return token; + } + + private String getTokenKey(String uuid,String userId) + { + return CacheConstants.SITE_LOGIN_TOKEN_KEY +userId+":" +uuid; + } + private String getTokenKey(String uuid) + { + return CacheConstants.SITE_LOGIN_TOKEN_KEY + uuid; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index c0af7c1..e8f088e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -3,6 +3,7 @@ package com.ruoyi.system.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.domain.entity.AppUser; import org.apache.ibatis.annotations.Param; import com.ruoyi.common.core.domain.entity.SysUser; @@ -126,4 +127,6 @@ public interface SysUserMapper * @return 结果 */ public SysUser checkEmailUnique(String email); + + AppUser selectAppUserById(long id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 10bc2ab..443ea42 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -1,6 +1,8 @@ package com.ruoyi.system.service; import java.util.List; + +import com.ruoyi.common.core.domain.entity.AppUser; import com.ruoyi.common.core.domain.entity.SysUser; /** @@ -203,4 +205,6 @@ public interface ISysUserService * @return 结果 */ public String importUser(List userList, Boolean isUpdateSupport, String operName); + + AppUser selectAppUserById(long id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 0aa82fb..9fcc218 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import javax.validation.Validator; + +import com.ruoyi.common.core.domain.entity.AppUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -547,4 +549,9 @@ public class SysUserServiceImpl implements ISysUserService } return successMsg.toString(); } + + @Override + public AppUser selectAppUserById(long id) { + return userMapper.selectAppUserById(id); + } } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 0856cb2..f60d3ce 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -141,8 +141,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + + insert into sys_user( user_id, dept_id,