假设401代表没登录,那么后端过滤器中应该怎么写才会让请求直接返回而不是执行业务功能后才返回
时间: 2024-02-17 15:02:06 浏览: 48
在后端过滤器中,可以通过设置响应状态码为 401 来表示未登录,然后直接返回响应,不再执行后续的业务功能。
示例代码:
```java
@Component
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// 判断当前请求是否已登录
boolean isLogin = false; // 这里需要根据具体业务逻辑进行判断
if (!isLogin) {
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 设置响应状态码为 401
return; // 直接返回响应,不再执行后续的业务功能
}
chain.doFilter(request, response);
}
// 其他方法省略...
}
```
在上面的示例中,我们在未登录的情况下,通过 `HttpServletResponse` 的 `setStatus` 方法设置响应状态码为 `HttpServletResponse.SC_UNAUTHORIZED`,即 401。然后,直接返回响应,不再执行后续的业务功能。
需要注意的是,如果前端使用了 ajax 请求,需要在响应中添加一个 `WWW-Authenticate` 头部,以便前端能够正确处理未登录的情况。示例如下:
```java
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"User Visible Realm\"");
return;
```
在上面的示例中,我们在响应中添加了一个 `WWW-Authenticate` 头部,并设置其值为 `"Basic realm=\"User Visible Realm\""`。这样在前端能够正确处理未登录的情况,弹出输入用户名和密码的对话框,让用户进行登录操作。