✨ 添加新特性。 logout remove cache details

This commit is contained in:
冷冷 committed 2018-11-17 17:37:38 +08:00
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);
}
@@ -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));
}
/**
@@ -41,4 +41,12 @@ public interface SysRoleService extends IService<SysRole> {
* @return
*/
List<SysRole> findRolesByUserId(Integer userId);
/**
* 通过角色ID,删除角色
*
* @param id
* @return
*/
Boolean deleteRoleById(Integer id);
}
@@ -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
@@ -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);
}
}