You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.4 KiB
70 lines
2.4 KiB
package com.fr.plugin.oauth; |
|
|
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
|
import com.fr.plugin.oauth.utils.CookieUtils; |
|
import com.fr.plugin.oauth.utils.GZipUtil; |
|
import com.fr.plugin.oauth.utils.ResponseWrapper; |
|
|
|
import javax.servlet.FilterChain; |
|
import javax.servlet.ServletOutputStream; |
|
import javax.servlet.http.Cookie; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import static javax.servlet.http.HttpServletResponse.SC_OK; |
|
|
|
public class LogoutFilter extends AbstractGlobalRequestFilterProvider { |
|
@Override |
|
public String filterName() { |
|
return "logoutFilter"; |
|
} |
|
|
|
@Override |
|
public String[] urlPatterns() { |
|
return new String[]{ |
|
"/decision/logout" |
|
}; |
|
} |
|
|
|
@Override |
|
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
|
try { |
|
ResponseWrapper responseWrapper = new ResponseWrapper(res); |
|
filterChain.doFilter(req, responseWrapper); |
|
|
|
//String newContent = null; |
|
String newContent = "{\"data\":\"https://xx/\"}"; |
|
|
|
byte[] content = responseWrapper.getContent(); |
|
if (content.length > 0 && res.getStatus() == SC_OK) { |
|
String header = res.getHeader("Content-Encoding"); |
|
boolean isGzip = "gzip".equalsIgnoreCase(header); |
|
if (isGzip) { |
|
content = GZipUtil.decompress(content); |
|
} |
|
|
|
|
|
byte[] result = null; |
|
|
|
if (isGzip) { |
|
result = GZipUtil.compress(newContent.getBytes("UTF-8")); |
|
res.setHeader("Content-Encoding", "gzip"); |
|
} else { |
|
result = newContent.getBytes("UTF-8"); |
|
} |
|
//把返回值输出到客户端 |
|
res.setContentLength(-1); |
|
res.setContentType("text/html;charset=UTF-8"); |
|
ServletOutputStream out = res.getOutputStream(); |
|
out.write(result); |
|
out.flush(); |
|
out.close(); |
|
res.flushBuffer(); |
|
} |
|
Cookie cookie = CookieUtils.getLoginPathCookie(req); |
|
CookieUtils.deleteCookie(res, cookie); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
} |
|
} |
|
}
|
|
|