在我的 Web 应用程序中,我有一个结帐流程,用户可以在其中决定是否要登录。该过程是相同的,但是通过登录,结帐过程中的数据会被预填充。
购物车 --> 继续登录/不登录 --> 结帐
我知道如何使用容器管理登录来“保护”特定页面,但是如何实现“可选登录”?我在网上搜索了很长时间,但只找到了常规的登录方法,可惜不是我需要的。
有没有办法通过将查询字符串附加到操作方法的返回值?
public String withLogin () {
return "checkout.xhtml?login=true";
}
public String noLogin() {
return "checkout.xhtml";
}
任何帮助和想法表示赞赏。
解决方案:
根据 kolossus 的回答,我找到了解决方案。验证方法是我需要但没有找到的。
所以我实现了一个 WebFilter,它基于我从上面提到的 ManagedBean 返回的 url 参数 login=true 进行身份验证。
@WebFilter("/order/checkout.xhtml")
public class LoginFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if(("true").equals(req.getParameter("login"))) {
req.authenticate((HttpServletResponse) response);
}
chain.doFilter(request, response);
}
// init and destroy Method
}
尽管 kolossus 说不应在 URL 中显示“登录选项”(我部分同意),但我还是以这种方式使用了它,因为用户可以自己决定是否要登录(通过单击不同的按钮)这不是安全问题。