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

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();
}
}
}