基於資料庫Rbac資料模型控制權限
阿新 • • 發佈:2018-11-22
@Component("rbacService") public class RbacServiceImpl implements RbacService { private AntPathMatcher antPathMatcher = new AntPathMatcher(); @Override public boolean hasPermission(HttpServletRequest request, Authentication authentication) { Object principal = authentication.getPrincipal(); boolean hasPermission = false; if (principal instanceof Admin) { //如果使用者名稱是admin,就永遠返回true if (StringUtils.equals(((Admin) principal).getUsername(), "admin")) { hasPermission = true; } else { // 讀取使用者所擁有許可權的所有URL Set<String> urls = ((Admin) principal).getUrls(); for (String url : urls) { if (antPathMatcher.match(url, request.getRequestURI())) { hasPermission = true; break; } } } } return hasPermission; } }
@Component @Order(Integer.MAX_VALUE) //最後載入 public class RbacAuthorizeConfigProvider implements AuthorizeConfigProvider { @Override public boolean config(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) { config .antMatchers(HttpMethod.GET, "/fonts/**").permitAll() .antMatchers(HttpMethod.GET, "/**/*.html", "/admin/me", "/resource").authenticated() .anyRequest() .access("@rbacService.hasPermission(request, authentication)"); return true; } }