bindPermission权限检查支持开关,便于开发环境调试

This commit is contained in:
mazhicheng 2020-05-30 14:30:10 +08:00
parent e3f3a0c674
commit f2d74c9100
3 changed files with 24 additions and 4 deletions

View File

@ -20,13 +20,16 @@ import com.diboot.core.util.V;
import com.diboot.iam.annotation.BindPermission; import com.diboot.iam.annotation.BindPermission;
import com.diboot.iam.config.Cons; import com.diboot.iam.config.Cons;
import com.diboot.iam.exception.PermissionException; import com.diboot.iam.exception.PermissionException;
import com.diboot.iam.starter.IamBaseProperties;
import com.diboot.iam.util.AnnotationUtils; import com.diboot.iam.util.AnnotationUtils;
import com.diboot.iam.util.IamSecurityUtils; import com.diboot.iam.util.IamSecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
@ -45,7 +48,10 @@ import java.util.Map;
*/ */
@Aspect @Aspect
@Component @Component
@Slf4j
public class BindPermissionAspect { public class BindPermissionAspect {
@Autowired
private IamBaseProperties iamBaseProperties;
/** /**
* 注解切面 * 注解切面
@ -59,6 +65,10 @@ public class BindPermissionAspect {
*/ */
@Before("pointCut()") @Before("pointCut()")
public void before(JoinPoint joinPoint) { public void before(JoinPoint joinPoint) {
if(iamBaseProperties.isEnablePermissionCheck() == false){
log.debug("BindPermission权限检查已停用如需启用请删除配置项: diboot.iam.enable-permission-check");
return;
}
// 超级管理员 权限放过 // 超级管理员 权限放过
if (IamSecurityUtils.getSubject().hasRole(Cons.ROLE_SUPER_ADMIN)) { if (IamSecurityUtils.getSubject().hasRole(Cons.ROLE_SUPER_ADMIN)) {
return; return;

View File

@ -82,6 +82,7 @@ public class IamBaseAutoConfig{
* @return * @return
*/ */
@Bean @Bean
@ConditionalOnMissingBean(CacheManager.class)
public CacheManager cacheManager() { public CacheManager cacheManager() {
String className = iamBaseProperties.getCacheManagerClass(); String className = iamBaseProperties.getCacheManagerClass();
if(V.isEmpty(className)){ if(V.isEmpty(className)){
@ -118,6 +119,7 @@ public class IamBaseAutoConfig{
} }
@Bean @Bean
@ConditionalOnMissingBean(ShiroFilterFactoryBean.class)
protected ShiroFilterFactoryBean shiroFilterFactoryBean(SessionsSecurityManager securityManager){ protected ShiroFilterFactoryBean shiroFilterFactoryBean(SessionsSecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 设置过滤器 // 设置过滤器
@ -138,16 +140,24 @@ public class IamBaseAutoConfig{
filterChainDefinitionMap.put("/error/**", "anon"); filterChainDefinitionMap.put("/error/**", "anon");
filterChainDefinitionMap.put("/auth/**", "anon"); filterChainDefinitionMap.put("/auth/**", "anon");
boolean allAnon = false;
String anonUrls = iamBaseProperties.getAnonUrls(); String anonUrls = iamBaseProperties.getAnonUrls();
if(V.notEmpty(anonUrls)){ if(V.notEmpty(anonUrls)){
for(String url : anonUrls.split(Cons.SEPARATOR_COMMA)){ for(String url : anonUrls.split(Cons.SEPARATOR_COMMA)){
filterChainDefinitionMap.put(url, "anon"); filterChainDefinitionMap.put(url, "anon");
if(url.equals("/**")){
allAnon = true;
}
} }
} }
filterChainDefinitionMap.put("/login", "authc"); filterChainDefinitionMap.put("/login", "authc");
filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/logout", "logout");
if(allAnon && iamBaseProperties.isEnablePermissionCheck() == false){
filterChainDefinitionMap.put("/**", "anon");
}
else{
filterChainDefinitionMap.put("/**", "jwt"); filterChainDefinitionMap.put("/**", "jwt");
}
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean; return shiroFilterFactoryBean;
} }

View File

@ -58,9 +58,9 @@ public class IamBaseProperties {
*/ */
private boolean initSql = true; private boolean initSql = true;
/** /**
* 是否开启权限自动更新 * 是否开启权限检查开发环境可关闭方便调试
*/ */
//private boolean enablePermissionUpdate = true; private boolean enablePermissionCheck = true;
/** /**
* 缓存Manager类 * 缓存Manager类