spring boot的GenericFilterBean,过滤器在客户端返回错误代码和响应头。

huangapple go评论121阅读模式
英文:

spring boot GenericFilterBean , filter return error code & response header at client side

问题

以下是翻译好的代码部分:

  1. package com.vs.security.filter;
  2. import org.springframework.stereotype.Component;
  3. import org.springframework.web.filter.GenericFilterBean;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. @Component
  12. public class TokenFilter extends GenericFilterBean {
  13. @Override
  14. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  15. HttpServletRequest httpRequest = asHttp(servletRequest);
  16. HttpServletResponse httpResponse = asHttp(servletResponse);
  17. boolean explicitlyTrue = true;
  18. if (explicitlyTrue) {
  19. httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "提供的信息无效");
  20. httpResponse.addHeader("SC_UNAUTHORIZED", "提供的信息无效");
  21. return;
  22. }
  23. filterChain.doFilter(servletRequest, servletResponse);
  24. }
  25. private HttpServletRequest asHttp(ServletRequest request) {
  26. return (HttpServletRequest) request;
  27. }
  28. private HttpServletResponse asHttp(ServletResponse response) {
  29. return (HttpServletResponse) response;
  30. }
  31. }
  1. form() {
  2. debugger;
  3. this.$axios.get(this.$dbServer + this.endpoint + 'form')
  4. .then((res) => {
  5. debugger;
  6. this.fd = res.data.fd;
  7. }).catch(() => { this.notifyOnFailure(this.oopsMessage) })
  8. }

如果你还有其他需要翻译的内容,请继续提供。

英文:

I have a filter

  1. package com.vs.security.filter;
  2. import org.springframework.stereotype.Component;
  3. import org.springframework.web.filter.GenericFilterBean;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. @Component
  12. public class TokenFilter extends GenericFilterBean {
  13. @Override
  14. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  15. HttpServletRequest httpRequest = asHttp(servletRequest);
  16. HttpServletResponse httpResponse = asHttp(servletResponse);
  17. boolean explicitlyTrue = true;
  18. if (explicitlyTrue) {
  19. httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Provided Information is Invalid");
  20. httpResponse.addHeader("SC_UNAUTHORIZED", "Provided Information is Invalid");
  21. return;
  22. }
  23. filterChain.doFilter(servletRequest, servletResponse);
  24. }
  25. private HttpServletRequest asHttp(ServletRequest request) {
  26. return (HttpServletRequest) request;
  27. }
  28. private HttpServletResponse asHttp(ServletResponse response) {
  29. return (HttpServletResponse) response;
  30. }
  31. }

My request on vuejs

  1. form () {
  2. debugger
  3. this.$axios.get(this.$dbServer+this.endpoint+'form')
  4. .then((res) => {
  5. debugger
  6. this.fd = res.data.fd;
  7. }).catch(() => { this.notifyOnFailure(this.oopsMessage) })
  8. }

As I have sending SC_UNAUTHORIZED = 401, but on client side, I am unable to get this 401. I even see network tab on browser inspect (as follow). Further, I am also adding header. but unable to get this header value at client side.

  1. Request URL: http://********:8081/*******/form
  2. Referrer Policy: no-referrer-when-downgrade
  3. Content-Type: application/json
  4. Date: Sun, 15 Mar 2020 06:29:00 GMT
  5. Transfer-Encoding: chunked
  6. Accept: application/json, text/plain, */*
  7. Accept-Encoding: gzip, deflate, br
  8. Accept-Language: en-US,en;q=0.9
  9. Connection: keep-alive
  10. Host: localhost:8081
  11. Origin: http://*******:8080
  12. Referer: http://*******:8080/
  13. Sec-Fetch-Dest: empty
  14. Sec-Fetch-Mode: cors
  15. Sec-Fetch-Site: same-site
  16. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
  17. Chrome/80.0.3987.132 Safari/537.36

答案1

得分: 1

你必须交换sendErroraddHeader调用的顺序。

  1. @Bean
  2. GenericFilterBean genericFilterBean() {
  3. return new GenericFilterBean() {
  4. @Override
  5. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  6. HttpServletResponse resp = ((HttpServletResponse) response);
  7. resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Provided Information is Invalid");
  8. resp.addHeader("SC_UNAUTHORIZED", "Provided Information is Invalid");
  9. }
  10. };
  11. }

结果:

  1. HTTP/1.1 401
  2. SC_UNAUTHORIZED: Provided Information is Invalid
  3. Content-Type: text/html;charset=UTF-8
  4. Content-Language: en-US
  5. Content-Length: 320
  6. Date: Sun, 15 Mar 2020 06:47:10 GMT
  7. Keep-Alive: timeout=60
  8. Connection: keep-alive
英文:

You have to swap order of sendError and addHeader calls

  1. @Bean
  2. GenericFilterBean genericFilterBean() {
  3. return new GenericFilterBean() {
  4. @Override
  5. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  6. HttpServletResponse resp = ((HttpServletResponse) response);
  7. resp.addHeader("SC_UNAUTHORIZED", "Provided Information is Invalid");
  8. resp.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Provided Information is Invalid");
  9. }
  10. };
  11. }

And result:

  1. HTTP/1.1 401
  2. SC_UNAUTHORIZED: Provided Information is Invalid
  3. Content-Type: text/html;charset=UTF-8
  4. Content-Language: en-US
  5. Content-Length: 320
  6. Date: Sun, 15 Mar 2020 06:47:10 GMT
  7. Keep-Alive: timeout=60
  8. Connection: keep-alive

huangapple
  • 本文由 发表于 2020年3月15日 14:37:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/60690359.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定