https://github.com/spring-projects/spring-security-oauth/issues/730
@Slf4j
@Component("permissionService")
public class UacPermissionServiceImpl implements UacPermissionService{
private AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override
public boolean hasPermission(Authentication authentication, HttpServletRequest request) {
String currentLoginName = SecurityUtils.getCurrentLoginName();
Set<String> currentAuthorityUrl = SecurityUtils.getCurrentAuthorityUrl();
String requestURI = request.getRequestURI();
log.info("验证权限loginName={}, requestURI={}, hasAuthorityUrl={}", currentLoginName, requestURI, Joiner.on(",").join(currentAuthorityUrl));
if (StringUtils.equals(currentLoginName, GlobalConstant.Sys.SUPER_MANAGER_LOGIN_NAME)) {
return true;
}
for (final String authority : currentAuthorityUrl) {
// DEMO项目放过查询权限
if (requestURI.contains("query") || requestURI.contains("get") || requestURI.contains("check") || requestURI.contains("select")) {
return true;
}
if (antPathMatcher.match(authority, requestURI)) {
return true;
}
}
return false;
}
}
@Order
@Component
public class PcPermissionAuthorizeConfigProvider implements AuthorizeConfigProvider {
/**
* Config boolean.
*
* @param config the config
*
* @return the boolean
*/
@Override
public boolean config(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) {
config
.anyRequest()
.access("@permissionService.hasPermission(authentication,request)");
return true;
}
}
@Configuration
public class PcSecurityExpressionHandler extends OAuth2WebSecurityExpressionHandler {
@Bean
public OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler(ApplicationContext applicationContext) {
OAuth2WebSecurityExpressionHandler expressionHandler = new OAuth2WebSecurityExpressionHandler();
expressionHandler.setApplicationContext(applicationContext);
return expressionHandler;
}
}
@Configuration
@EnableResourceServer
public class PcResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.expressionHandler(pcSecurityExpressionHandler);
}
}
暂时记录一下 以后整理