AnyRolesAuthorizationFilter.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package com.yaozhitech.spring5.filter;
  2. import java.io.IOException;
  3. import javax.servlet.ServletRequest;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.apache.shiro.subject.Subject;
  7. import org.apache.shiro.web.filter.authz.AuthorizationFilter;
  8. import org.apache.shiro.web.util.WebUtils;
  9. import org.springframework.http.HttpStatus;
  10. public class AnyRolesAuthorizationFilter extends AuthorizationFilter {
  11. @Override
  12. protected void postHandle(ServletRequest request, ServletResponse response){
  13. }
  14. @Override
  15. protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object mappedValue) throws Exception {
  16. Subject subject = getSubject(servletRequest, servletResponse);
  17. String[] rolesArray = (String[]) mappedValue;
  18. if (rolesArray == null || rolesArray.length == 0) { //没有角色限制,有权限访问
  19. return true;
  20. }
  21. for (String role : rolesArray) {
  22. if (subject.hasRole(role)) //若当前用户是rolesArray中的任何一个,则有权限访问
  23. return true;
  24. }
  25. return false;
  26. }
  27. @Override
  28. protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
  29. HttpServletResponse httpResponse = WebUtils.toHttp(response);
  30. httpResponse.setCharacterEncoding("UTF-8");
  31. httpResponse.setContentType("application/json;charset=utf-8");
  32. httpResponse.setStatus(HttpStatus.UNAUTHORIZED.ordinal());
  33. return false;
  34. }
  35. }