2013-10-03 46 views
0

我有一個簡單的web應用程序,用戶可以在其中創建其他用戶角色,我想要的安全目的是用戶(管理員角色)創建另一個用戶後,當用戶在Web瀏覽器中按下後退按鈕時,用戶可以看到輸入文本框中的所有值我想在用戶按回時重置輸入文本框的值或當用戶按下後退按鈕時前一頁過期當按回來時,JSF重置支持bean RequestScoped

謝謝。

+0

如果這個bean是'@ RequestScoped',那麼你應該沒有問題,因爲bean只存儲了請求的信息。但是,您確定問題不在於您的瀏覽器提醒表單值嗎? –

+0

那麼,即使我的瀏覽器從值緩存,它必須重置該bean,當從瀏覽器按下返回按鈕或atleast會給會話過期的消息。 – mgk22

+0

正如我所說,如果bean是請求作用域,那麼它的生命週期只針對一個請求。 Bean值是在發送表單時設置的,所以當用戶輸入bean時,bean根本不會爲表單賦值,直到他按下提交按鈕。所以按下後退按鈕將撤銷所有的操作 –

回答

1

您需要關閉瀏覽器的自動完成功能。這是在你的形式投入使用autocomplete屬性來完成:

<h:form> 
    <h:inputText value="#{auth.username}" required="true" autocomplete="off" /> 
    <h:inputSecret value="#{auth.password}" required="true" autocomplete="off" /> 
    <h:commandButton value="Login" action="#{auth.login}" /> 
    <h:messages /> 
</h:form> 

看一看this

+0

謝謝它適用於所有主流瀏覽器,包括Chrome – mgk22

+0

優秀,謝謝 – cheloncio

0

首先,您應該使用過濾器來提高安全性。在您的過濾器中,您可以設置響應的標題。這將處理您的安全問題。一個簡單的實現將會是這樣的:

import javax.servlet.*; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebFilter(urlPatterns = {"yourUrlThatWillbeProtected"}) 
//you should also put dispatcherTypes in webFilter 
public class PageFilter implements Filter { 


public void init(FilterConfig filterConfig) throws ServletException { 

} 


public void doFilter(ServletRequest request, ServletResponse response, 
        FilterChain chain) throws IOException, ServletException { 


     //do some filtering , take user, check user, etc. 

     HttpServletResponse res = (HttpServletResponse) response; 
     // security of closed pages 
     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
     res.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
     res.setDateHeader("Expires", 0); // Proxies. 
     chain.doFilter(request, response); 


} 

@Override 
public void destroy() { 
} 
} 
+0

感謝它的工作原理,在IE 8和Firefox上,但沒有在Chrome上工作 – mgk22

+0

實際上我通常使用chrome,它對我很有用。 – oko