RoleFilter.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.nuliji.tools.shiro;
  2. import com.alibaba.fastjson.JSON;
  3. import com.nuliji.tools.Response;
  4. import org.apache.shiro.subject.Subject;
  5. import org.apache.shiro.util.CollectionUtils;
  6. import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.http.MediaType;
  10. import javax.servlet.ServletRequest;
  11. import javax.servlet.ServletResponse;
  12. import java.io.IOException;
  13. import java.util.Set;
  14. /**
  15. * Created by GaoJie on 2017/07/31.
  16. */
  17. public class RoleFilter extends RolesAuthorizationFilter {
  18. private static final Logger logger = LoggerFactory.getLogger(RoleFilter.class);
  19. @Override
  20. public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
  21. Subject subject = getSubject(request, response);
  22. if(!subject.isAuthenticated() && !subject.isRemembered()){
  23. logger.debug("not login");
  24. return false;
  25. }
  26. String[] rolesArray = (String[])((String[])mappedValue);
  27. if(rolesArray != null && rolesArray.length != 0) {
  28. subject.getPrincipals();
  29. Set<String> roles = CollectionUtils.asSet(rolesArray);
  30. for(String role: roles){
  31. if(subject.hasRole(role)) return true;
  32. logger.debug("not {}", role);
  33. }
  34. }
  35. return false;
  36. }
  37. @Override
  38. protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
  39. saveRequest(request);
  40. response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType
  41. response.setCharacterEncoding("UTF-8"); //避免乱码
  42. try {
  43. response.getWriter().write(JSON.toJSONString( new Response(101, "未授权访问", null)));
  44. } finally {
  45. }
  46. return false;
  47. }
  48. }