在我的Web应用程序中,我有一个结帐过程,用户可以决定是否要登录。这个过程是一样的,但是登录过程中的数据会被预填充。在JSF中可选登录
购物车 - >继续有/无登录 - >结账
我知道如何“安全”与容器管理的登录特定网页,但如何我实施“可选登录”?我长时间搜索了互联网,但只找到了登录的常规方法,不幸的是并不是我所需要的。
有没有办法通过追加查询字符串的行动方法的返回值?
public String withLogin() {
return "checkout.xhtml?login=true";
}
public String noLogin() {
return "checkout.xhtml";
}
任何帮助和想法表示赞赏。
解决方案:基于kolossus的回答
,我发现我的解决方案。 authenticate-Method是我需要的,但没有找到。
因此,我实现了一个WebFilter,它根据url paramater login = true进行身份验证,如上所述我从ManagedBean返回。
@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中的“登录选项”(我部分同意),我用这种方式,无论如何,因为如果他要对自己的登录或没有用户可以自行决定(通过点击不同的按钮),这不是一个安全问题。
谢谢你的答案。但是,为什么我不应该显示“url = true”在url中?用户可以决定是否他想要登录,所以它使差异... – Manuel 2013-05-12 08:30:06
@曼努埃尔,我不是说用户不应该通过点击不同的按钮来决定他的偏好,我所说的是您选择的参数名称在浏览器的地址栏中是可读的,并将您的实施细节暴露给肉眼。我在这里推荐你混淆参数名称和值,以便普通用户无法理解它。将一些变量放入一个看起来没有意义的参数中,看起来像“rand = r234u2yf9393yyry3aa1kv”对用户来说是没有意义的,他们不太可能想要篡改认证机制 – kolossus 2013-05-12 15:04:30