大家好,我正在使用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
}
}
我也把它包含在网络中.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 页面中,以便浏览器不会缓存页面。