TokenFilter.java 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package com.nuliji.tools.shiro;
  2. import com.alibaba.fastjson.JSON;
  3. import com.nuliji.tools.Response;
  4. import com.nuliji.tools.shiro.inter.HeaderTokenManager;
  5. import com.nuliji.tools.shiro.inter.impl.RealmHeaderToken;
  6. import org.apache.shiro.authc.AuthenticationException;
  7. import org.apache.shiro.authc.AuthenticationToken;
  8. import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.http.MediaType;
  13. import javax.servlet.ServletRequest;
  14. import javax.servlet.ServletResponse;
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.io.IOException;
  17. /**
  18. * Created by GaoJie on 2017/11/3.
  19. */
  20. public class TokenFilter extends BasicHttpAuthenticationFilter {
  21. private static final Logger logger = LoggerFactory.getLogger(TokenFilter.class);
  22. @Autowired
  23. private HeaderTokenManager tokenManager;
  24. public TokenFilter(HeaderTokenManager tokenManager) {
  25. this.tokenManager = tokenManager;
  26. }
  27. @Override
  28. protected boolean isLoginAttempt(ServletRequest request, ServletResponse response) {
  29. logger.debug("tokenFilter: {}", ((HttpServletRequest)request).getRequestURI());
  30. HttpServletRequest req = (HttpServletRequest) request;
  31. return req.getHeader("token") != null;
  32. }
  33. // @Override
  34. // public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
  35. // HttpServletRequest req = (HttpServletRequest) request;
  36. // String token = req.getHeader("token");
  37. // if (token == null || token.isEmpty()) {
  38. // return false;
  39. // }
  40. // return true;
  41. // }
  42. @Override
  43. protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {
  44. HttpServletRequest req = (HttpServletRequest) request;
  45. String token = req.getHeader("token");
  46. // 获取无状态Token
  47. RealmHeaderToken realmHeaderToken = tokenManager.getToken(token);
  48. return realmHeaderToken;
  49. }
  50. @Override
  51. protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e,
  52. ServletRequest request, ServletResponse response) {
  53. logger.error(e.getMessage());
  54. return false;
  55. }
  56. @Override
  57. protected boolean sendChallenge(ServletRequest request, ServletResponse response) {
  58. saveRequest(request);
  59. response.setContentType(MediaType.APPLICATION_JSON_VALUE); //设置ContentType
  60. response.setCharacterEncoding("UTF-8"); //避免乱码
  61. try {
  62. response.getWriter().write(JSON.toJSONString( new Response(101, "未授权访问", null)));
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. } finally {
  66. }
  67. return false;
  68. }
  69. }