✨ 添加新特性。 logout remove cache details
This commit is contained in:
1 parent
517c86b900
commit
c77668bd0a
5 files changed
+69
-15
No files matched your search
@@ -27,6 +27,7 @@ import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.core.util.TenantUtils;
|
||||
import com.pig4cloud.pigx.common.security.service.PigxUser;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.data.redis.core.ConvertingCursor;
|
||||
import org.springframework.data.redis.core.Cursor;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
@@ -39,7 +40,6 @@ import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
||||
import org.springframework.security.oauth2.provider.OAuth2Authentication;
|
||||
import org.springframework.security.oauth2.provider.token.TokenStore;
|
||||
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@@ -60,6 +60,7 @@ public class PigxTokenEndpoint {
|
||||
private static final String PIGX_OAUTH_ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:";
|
||||
private final TokenStore tokenStore;
|
||||
private final RedisTemplate redisTemplate;
|
||||
private final CacheManager cacheManager;
|
||||
|
||||
/**
|
||||
* 认证页面
|
||||
@@ -78,15 +79,20 @@ public class PigxTokenEndpoint {
|
||||
*/
|
||||
@DeleteMapping("/logout")
|
||||
public R<Boolean> logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
|
||||
if (StringUtils.hasText(authHeader)) {
|
||||
String tokenValue = authHeader.replace("Bearer", "").trim();
|
||||
OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
|
||||
if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) {
|
||||
return new R<>(false, "退出失败,token 为空");
|
||||
}
|
||||
tokenStore.removeAccessToken(accessToken);
|
||||
if (StrUtil.isBlank(authHeader)) {
|
||||
return new R<>(false, "退出失败,token 为空");
|
||||
}
|
||||
|
||||
String tokenValue = authHeader.replace("Bearer", "").trim();
|
||||
OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
|
||||
if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) {
|
||||
return new R<>(false, "退出失败,token 无效");
|
||||
}
|
||||
|
||||
OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken);
|
||||
cacheManager.getCache("user_details")
|
||||
.evict(auth2Authentication.getName());
|
||||
tokenStore.removeAccessToken(accessToken);
|
||||
return new R<>(Boolean.TRUE);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -84,7 +84,7 @@ public class RoleController {
|
||||
@DeleteMapping("/{id}")
|
||||
@PreAuthorize("@pms.hasPermission('sys_role_del')")
|
||||
public R<Boolean> roleDel(@PathVariable Integer id) {
|
||||
return new R<>(sysRoleService.deleteById(id));
|
||||
return new R<>(sysRoleService.deleteRoleById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+8
@@ -41,4 +41,12 @@ public interface SysRoleService extends IService<SysRole> {
|
||||
* @return
|
||||
*/
|
||||
List<SysRole> findRolesByUserId(Integer userId);
|
||||
|
||||
/**
|
||||
* 通过角色ID,删除角色
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Boolean deleteRoleById(Integer id);
|
||||
}
|
||||
+21
-6
@@ -22,14 +22,18 @@ package com.pig4cloud.pigx.admin.service.impl;
|
||||
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
||||
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysMenu;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysRoleMenu;
|
||||
import com.pig4cloud.pigx.admin.api.vo.MenuVO;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysMenuMapper;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper;
|
||||
import com.pig4cloud.pigx.admin.service.SysMenuService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -40,7 +44,9 @@ import java.util.List;
|
||||
* @since 2017-10-29
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
||||
private final SysRoleMenuMapper sysRoleMenuMapper;
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "menu_details", key = "#roleId + '_menu'")
|
||||
@@ -51,13 +57,22 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||
@Override
|
||||
@CacheEvict(value = "menu_details", allEntries = true)
|
||||
public Boolean deleteMenu(Integer id) {
|
||||
// 删除当前节点
|
||||
this.deleteById(id);
|
||||
// 查询父节点为当前节点的节点
|
||||
SysMenu conditon = new SysMenu();
|
||||
conditon.setParentId(id);
|
||||
List<Integer> menuIdList = this.selectList(new EntityWrapper<>(conditon))
|
||||
.stream().map(SysMenu::getMenuId)
|
||||
.collect(Collectors.toList());
|
||||
menuIdList.add(id);
|
||||
|
||||
// 删除父节点为当前节点的节点
|
||||
SysMenu conditon2 = new SysMenu();
|
||||
conditon2.setParentId(id);
|
||||
return this.delete(new EntityWrapper<>(conditon2));
|
||||
//删除关联ROLE_MENU 数据
|
||||
menuIdList.forEach(menu -> {
|
||||
SysRoleMenu conditon2 = new SysRoleMenu();
|
||||
conditon2.setMenuId(menu);
|
||||
sysRoleMenuMapper.delete(new EntityWrapper<>(conditon2));
|
||||
});
|
||||
//删除当前菜单及其子菜单
|
||||
return this.deleteBatchIds(menuIdList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+25
@@ -19,11 +19,17 @@
|
||||
|
||||
package com.pig4cloud.pigx.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
||||
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysRole;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysRoleMenu;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysRoleMapper;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper;
|
||||
import com.pig4cloud.pigx.admin.service.SysRoleService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -36,7 +42,9 @@ import java.util.List;
|
||||
* @since 2017-10-29
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
|
||||
private SysRoleMenuMapper sysRoleMenuMapper;
|
||||
|
||||
/**
|
||||
* 通过用户ID,查询角色信息
|
||||
@@ -48,4 +56,21 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||
public List<SysRole> findRolesByUserId(Integer userId) {
|
||||
return baseMapper.findRolesByUserId(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过角色ID,删除角色,并清空角色菜单缓存
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@CacheEvict(value = "menu_details", allEntries = true)
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteRoleById(Integer id) {
|
||||
SysRoleMenu condition = new SysRoleMenu();
|
||||
condition.setRoleId(id);
|
||||
|
||||
sysRoleMenuMapper.delete(new EntityWrapper<>(condition));
|
||||
return this.deleteById(id);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user