在 jsf 和 spring boot 中注销时浏览器后退按钮未“禁用”

如何解决在 jsf 和 spring boot 中注销时浏览器后退按钮未“禁用”

我使用 join faces 来集成 jsf 和 spring boot 并添加了 admin-faces,效果很好。但是,当用户从 jsf 主页注销以登录时,我遇到了一个问题,这样用户仍然可以单击浏览器后退按钮并导航回主页。我关注了 this 并且似乎对我不起作用。这是我的代码

@ComponentScan(basePackages = {"com.mypackage*"})
@EnableAutoConfiguration
@EnableWebMvc
public class SpringApp{

    private @Autowired
    AutowireCapablebeanfactory beanfactory;
    
    @Bean
    public FilterRegistrationBean myFilter() {

        System.out.println("registred");//getting called on start

        FilterRegistrationBean registration = new FilterRegistrationBean();
        NoCacheFilter myFilter = new NoCacheFilter();
        registration.setdispatcherTypes(dispatcherType.FORWARD,dispatcherType.REQUEST);
        beanfactory.autowireBean(myFilter);
        registration.setFilter(myFilter);
        registration.addUrlPatterns("/*");

        return registration;
    }

}

这是我的 NoCache 过滤器

public class NoCacheFilter implements Filter {
        @Override
        public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,servletexception {
    HttpServletRequest reqq = (HttpServletRequest) request;
            HttpServletResponse response = (HttpServletResponse) res;
           if (!reqq.getRequestURI().startsWith(reqq.getcontextpath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
        response .setHeader("Cache-Control","no-cache,no-store,must-revalidate"); // HTTP 1.1.
        response.setHeader("Pragma","no-cache"); // HTTP 1.0.
        response.setDateHeader("Expires",0); // Proxies.
    }
    
            System.out.println("filterig called");//getting called 
    
            chain.doFilter(req,res);
        }
    
    
    }

这是我的托管 bean

  @Getter
    @Setter
    @Scope(value = "session")
    @Component(value = "login")
    public class LoginManagedBean {
    
        @Autowired
        private LoginService loginService;
        
 

  public void logout() throws IOException {
        System.out.println("log out");
        FacesContext.getCurrentInstance().getExternalContext().redirect(getlogoutPath("login"));
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        session.invalidate();


}

public String getlogoutPath(String url) {
    ServletContext servletContext = (ServletContext) FacesContext
            .getCurrentInstance().getExternalContext().getContext();
    return servletContext.getcontextpath() + "/" + url + ".xhtml?faces-redirect=true";
}
        
         public String login()
        {
            System.out.println("username:"+getUsername());
            Users u=loginService.login(getUsername(),getpassword());
    
            if(u!=null)
            {
             
                return "home.xhtml?faces-redirect=true";
            }
            else{
                String msg = "Invalid Username / Password!!";
                FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,msg,""));
            }
            return "";
        }
    }

这是我的主页jsf,它正在调用注销

<h:form>
                <p:growl id="messages"/>

                <p:menubar>
 <p:submenu label="Account" icon="fa fa-address-card bg_primary" style="position: absolute; right: 6px;">
               
                        <p:menuitem value="Log Out" action="#{login.logout}" icon="fa fa-power-off bg_primary"/>//to call managed bean
                    
                    </p:submenu>
                      </h:menubar>
                  </h:form>

这是我的 application.properties

server.servlet.context-path=/MyContext
joinfaces.primefaces.theme=admin
joinfaces.jsf.project-stage=development
joinfaces.primefaces.csp=true
joinfaces.primefaces.font-awesome=true
joinfaces.myfaces.clear-input-when-submitted-value-is-null-or-empty=true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?