我正在檢查用戶的登錄狀態(權限),如果他沒有訪問特定.jsp頁面的正確權限,我想將他重定向到另一個頁面。使用c:redirect重定向用戶瀏覽器安全嗎?
是可以安全使用
<c:redirect>
從JSTL
?用戶是否會以100%重定向,或者他可能會收到我的jsp頁面的html輸出?
在php中,可以肯定的是,我將放置一個exit();在HEADER重定向之後。但是,由於我在asp和servlet中使用MVC,因此我不想將Java放在我的.jsp頁面中。
我正在檢查用戶的登錄狀態(權限),如果他沒有訪問特定.jsp頁面的正確權限,我想將他重定向到另一個頁面。使用c:redirect重定向用戶瀏覽器安全嗎?
是可以安全使用
<c:redirect>
從JSTL
?用戶是否會以100%重定向,或者他可能會收到我的jsp頁面的html輸出?
在php中,可以肯定的是,我將放置一個exit();在HEADER重定向之後。但是,由於我在asp和servlet中使用MVC,因此我不想將Java放在我的.jsp頁面中。
我檢查用戶(權限)的登錄狀態,我想他重定向到另一個頁面,如果他有不正確的權限訪問特定的.jsp頁面。
的典型方法是使用一個servlet Filter
這一點。您需要將這些受限制的網頁分組在通用網址格式後面,例如/app/*
,/secured/*
,/private/*
或其他什麼,然後將Filter
準確地映射到該URL模式,該模式在doFilter()
方法中大致如下(假設您以常規方式將登錄用戶存儲在會話中)。
@WebFilter("/app/*")
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (req.getSession().getAttribute("user") != null) {
// User is logged in, so just continue request.
chain.doFilter(request, response);
} else {
// User is not logged in, so redirect to some index/login page.
res.sendRedirect(req.getContextPath() + "/login.jsp");
}
}
// ...
}
這使JSP免受複製過程中的混亂和解決方法,以防止在重定向之前提交響應。
如果您使用的是MVC,則不應在JSP中使用JSTL完成重定向。並不是說它不起作用,但發佈重定向僅僅是視圖的責任。這是控制器的責任。
如果響應的某些部分已被刷新,則從JSP重定向可能會失敗。
在控制器servlet中使用response.sendRedirect()
。
嗯我不知道這個:我怎樣才能調用一些參數的servlet在沒有用戶操作的表單中請求? Plus:「如果響應的某些部分已被刷新,則從JSP重定向可能會失敗。」這是什麼意思?用戶將看到頁面的內容?當然,重定向被放在.jsp文件的頭部...... – Bedo 2012-02-02 22:56:20
MVC體系結構的要點是讓每個請求都由控制器處理,用Java編寫,然後將此控制器分派到一個視圖,由一個JSP。如果這不是你正在做的,那麼你沒有使用MVC。把c:redirect作爲JSP的第一件事情,你不應該有任何問題。爲什麼不測試它? – 2012-02-02 23:03:55
是的,當然,我已經測試過它,它的工作原理,但我不確定如果用戶有惡意的意圖或在頁面生成期間服務器上發生錯誤,這是否安全。 它看起來相當安全嗎? – Bedo 2012-02-02 23:14:41
前進怎麼樣? http://stackoverflow.com/questions/2591918/java-servlet-difference-between-send-redirect-and-forward-in-servlets – HRgiger 2012-02-02 22:40:51