jsf - 如何实现 LogoutFilter?
问题描述
大家好,我正在使用 JSF 构建一个 Java Web 应用程序。对于身份验证,我使用了 Apache Shiro。我构建了一个注销按钮,该按钮调用 shiro 的注销方法,然后将用户重定向到登录页面。但是如果我点击后退按钮,用户可以导航到页面。我读到了这个,我意识到我必须实现我自己的自定义过滤器。这是过滤器的代码:
import al.ikubinfo.ipermit.bpmn.model.entities.UserEntity;
import al.ikubinfo.ipermit.bpmn.services.UserService;
public class LoginFilter implements Filter {
private static final String LOGIN_VIEW = "/login.xhtml";
@EJB
private UserService userService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
UserEntity currentUser = userService.getCurrentUser();
if (currentUser == null) {
httpServletResponse.sendRedirect(httpServletRequest.getServletContext().getContextPath() + LOGIN_VIEW);
}
else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
我也将它包含在 web.xml 中,但它不起作用。应用程序启动成功,但没有打开任何视图。有人能帮助我吗?
解决方案
使用后退按钮时,您会看到页面的缓存版本。该页面在浏览器中本地缓存。
注销后,您必须进入登录页面
在此页面上使用以下 javascript
var url = window.location.href;
window.history.go(-window.history.length);
window.location.href = url;
也尝试插入
<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
进入jsp页面,以便浏览器不缓存页面。
推荐阅读
- matlab - 如何绘制此波形
- html - 屏幕阅读器在导航时读取额外内容
- apache-kafka - 您如何设置 Hyperledger Fabric OSN 以通过 SSL 与 Kafka 集群通信?
- python - Apache Python 内部服务器错误 500
- openjpa - 与 TomEE+ 中的 JDBC 驱动程序和连接 URL 相关的 OpenJPA 异常
- database - Laravel 多对多关系连接表问题
- android - 使用 mp4Parser 修剪音频。或者有其他选择吗?
- angular - 使用多个插座的 Angular 6 路由
- c# - Console.Read() 在输入两位/多位数字时是否将第一位数字作为输入?
- wordpress - 如何在 WordPress 的内联脚本中添加随机数