UrlAccessDecisionManager.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.diagbot.config.security;
  2. import org.springframework.security.access.AccessDecisionManager;
  3. import org.springframework.security.access.AccessDeniedException;
  4. import org.springframework.security.access.ConfigAttribute;
  5. import org.springframework.security.authentication.InsufficientAuthenticationException;
  6. import org.springframework.security.core.Authentication;
  7. import org.springframework.security.core.GrantedAuthority;
  8. import org.springframework.security.web.FilterInvocation;
  9. import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
  10. import org.springframework.stereotype.Service;
  11. import javax.servlet.http.HttpServletRequest;
  12. import java.util.Collection;
  13. /**
  14. * @Description: 自定义权限拦截
  15. * @author: gaodm
  16. * @time: 2018/8/23 13:46
  17. */
  18. @Service
  19. public class UrlAccessDecisionManager implements AccessDecisionManager {
  20. @Override
  21. public void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException {
  22. HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
  23. String url, method;
  24. if (matchPermitAllUrl(request)) {
  25. return;
  26. }
  27. if ("anonymousUser".equals(authentication.getPrincipal())) {
  28. throw new AccessDeniedException("no right");
  29. } else {
  30. for (GrantedAuthority ga : authentication.getAuthorities()) {
  31. String[] authority = ga.getAuthority().split(";");
  32. url = authority[0];
  33. method = authority[1];
  34. if (matchers(url, request)) {
  35. if (method.equals(request.getMethod()) || "ALL".equals(method)) {
  36. return;
  37. }
  38. }
  39. }
  40. }
  41. throw new AccessDeniedException("no right");
  42. }
  43. @Override
  44. public boolean supports(ConfigAttribute attribute) {
  45. return true;
  46. }
  47. @Override
  48. public boolean supports(Class<?> clazz) {
  49. return true;
  50. }
  51. private Boolean matchPermitAllUrl(HttpServletRequest request){
  52. if (matchers("/swagger/**", request)
  53. || matchers("/v2/**", request)
  54. || matchers("/swagger-ui.html/**", request)
  55. || matchers("/swagger-resources/**", request)
  56. || matchers("/webjars/**", request)
  57. || matchers("/user/getJwt/**", request)
  58. || matchers("/user/registry/**", request)
  59. || matchers("/user/test/**", request)
  60. || matchers("/druid/**", request)
  61. || matchers("/actuator/**", request)
  62. || matchers("/hystrix/**", request)
  63. || matchers("/hi/**", request)
  64. || matchers("/test/**", request)
  65. || matchers("/user/refreshJwt", request)
  66. || matchers("/user/checkToken", request)
  67. || matchers("/userver/getImgVerification", request)
  68. || matchers("/userver/verifyImgVerification", request)
  69. || matchers("/userver/getSmsWithRegister", request)
  70. || matchers("/userver/getSmsWithResetPassword", request)
  71. || matchers("/userver/verifySmsVerification", request)
  72. || matchers("/getUserEnumsData", request)
  73. || matchers("/user/getPermission", request)
  74. || matchers("/user/resetPassword", request)
  75. || matchers("/user/index", request)
  76. || matchers("/user/getUserByOrgName", request)
  77. || matchers("/user/getUserAuthStatus", request)
  78. || matchers("/user/getUserAndOrg", request)
  79. || matchers("/user/verifyNoUsername", request)
  80. || matchers("/user/verifyExistUsername", request)
  81. || matchers("/userAuthentication/getAuthInfoCount", request)
  82. || matchers("/", request)) {
  83. return true;
  84. }
  85. return false;
  86. }
  87. private boolean matchers(String url, HttpServletRequest request) {
  88. AntPathRequestMatcher matcher = new AntPathRequestMatcher(url);
  89. if (matcher.matches(request)) {
  90. return true;
  91. }
  92. return false;
  93. }
  94. }