如何解决在 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 举报,一经查实,本站将立刻删除。