5fb4c276304b176d7e00ae59f62199ee2ce1b16d.svn-base 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package org.jeecg.config.shiro.filters;
  2. import javax.servlet.ServletRequest;
  3. import javax.servlet.ServletResponse;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.apache.shiro.subject.Subject;
  7. import org.apache.shiro.web.filter.AccessControlFilter;
  8. import lombok.extern.slf4j.Slf4j;
  9. /**
  10. * @Author Scott
  11. * @create 2019-02-01 15:56
  12. * @desc 鉴权请求URL访问权限拦截器
  13. */
  14. @Slf4j
  15. public class ResourceCheckFilter extends AccessControlFilter {
  16. private String errorUrl;
  17. public String getErrorUrl() {
  18. return errorUrl;
  19. }
  20. public void setErrorUrl(String errorUrl) {
  21. this.errorUrl = errorUrl;
  22. }
  23. /**
  24. * 表示是否允许访问 ,如果允许访问返回true,否则false;
  25. *
  26. * @param servletRequest
  27. * @param servletResponse
  28. * @param o 表示写在拦截器中括号里面的字符串 mappedValue 就是 [urls] 配置中拦截器参数部分
  29. * @return
  30. * @throws Exception
  31. */
  32. @Override
  33. protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception {
  34. Subject subject = getSubject(servletRequest, servletResponse);
  35. String url = getPathWithinApplication(servletRequest);
  36. log.info("当前用户正在访问的 url => " + url);
  37. return subject.isPermitted(url);
  38. }
  39. /**
  40. * onAccessDenied:表示当访问拒绝时是否已经处理了; 如果返回 true 表示需要继续处理; 如果返回 false
  41. * 表示该拦截器实例已经处理了,将直接返回即可。
  42. *
  43. * @param servletRequest
  44. * @param servletResponse
  45. * @return
  46. * @throws Exception
  47. */
  48. @Override
  49. protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception {
  50. log.info("当 isAccessAllowed 返回 false 的时候,才会执行 method onAccessDenied ");
  51. HttpServletRequest request = (HttpServletRequest) servletRequest;
  52. HttpServletResponse response = (HttpServletResponse) servletResponse;
  53. response.sendRedirect(request.getContextPath() + this.errorUrl);
  54. // 返回 false 表示已经处理,例如页面跳转啥的,表示不在走以下的拦截器了(如果还有配置的话)
  55. return false;
  56. }
  57. }