Using a custom Spring Security filter, I'd like to return an HTTP 401 error code if the HTTP Header doesn't contain a particular key-value pair.
Example:
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
final String val = request.getHeader(FOO_TOKEN)
if(val == null || !val.equals("FOO")) {
// token is not valid, return an HTTP 401 error code
...
}
else {
// token is good, let it proceed
chain.doFilter(req, res);
}
As I understand, I could do the following:
(1) ((HttpServletResponse) res).setStatus(401)
and skip the remaining filter chain
OR
(2) throw an exception that, eventually, results in Spring Security throwing a 401 error to the client.
If #1 is the better option, how can I skip the filter chain after calling setStatus(401)
on the response?
Or, if #2 is the right way to go, which exception should I throw?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…