在我的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