我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
即使用户知道某些页面的URL,我也想阻止访问某些页面.例如,/localhost:8080/user/home.xhtml(需要先登录)如果没有记录则重定向到/index.xhtml.
在JSF中如何做到这一点?我在Google上读到需要过滤器,但我不知道该怎么做.
我正在展示非常敏感的数据.用户从我的服务器注销后,我不希望其他用户能够看到数据点击浏览器的"后退"按钮.
我怎样才能做到这一点?
我有一个用于登录的过滤器.它在"用户名"和"密码"字段上执行文本检查.当且仅当文本检查正确完成时,请求才会进入Servlet.后者执行必须与数据库交互的控件.这个链条是否正确?
HttpSession session = request.getSession();
try
{
session.removeAttribute("logonSessData");
session.invalidate();
String pageToForward = request.getContextPath();
response.sendRedirect(pageToForward);
}
catch (Exception sqle)
{
System.out.println("error UserValidateServlet message : " + sqle.getMessage());
System.out.println("error UserValidateServlet exception : " + sqle);
}
Run Code Online (Sandbox Code Playgroud)
在Logout servlet中我写了上面的代码doPost和doGet方法.注销后会显示登录界面,然后如果按下后退按钮,它会在注销前显示上一屏幕然后如果我点击任何页面显示"HTTP状态500",现在如果我按下F5则会加热登录Servlet并获得完全访问权限用户.
如何停止此问题显示在Logout使用后退按钮后F5用户无法使用任何页面?
我在JSP中有以下代码:
当用户单击注销按钮时,我想将其重定向到登录页面并终止当前会话.我已成功完成重定向部分,但我不知道如何终止会话.怎么可以这样做呢?
我正在使用servlet开发一个java web应用程序,为了防止用户点击后退按钮查看以前用户的信息,我有以下代码:
protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
HttpSession session=request.getSession(true);
response.setContentType("text/html");
response.setHeader("Cache-Control","no-cache,no-store");
response.setDateHeader("Expires",0);
response.setHeader("Pragma","no-cache");
......
// if (!User_Logged_In)
session.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
此外,我在文件中还有以下代码:web/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
......
<filter>
<filter-name>ResponseHeaderFilter</filter-name>
<filter-class>ResponseHeaderFilter</filter-class>
<init-param>
<param-name>Cache-Control</param-name>
<param-value>private,no-cache,no-store</param-value>
</init-param>
<init-param>
<param-name>Pragma</param-name>
<param-value>no-cache</param-value>
</init-param>
<init-param>
<param-name>Expires</param-name>
<param-value>0</param-value>
</init-param>
</filter>
</web-app>
Run Code Online (Sandbox Code Playgroud)
ResponseHeaderFilter.java看起来像这样:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ResponseHeaderFilter implements Filter
{
FilterConfig fc;
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException
{
HttpServletResponse response=(HttpServletResponse)res;
for …Run Code Online (Sandbox Code Playgroud) 不应该使会话无效导致request.getSession(false)返回null吗?在我的注销servlet中,我打电话
session.invalidate();
Run Code Online (Sandbox Code Playgroud)
在我的登录状态过滤器中,我打电话
request.getSession(false);
Run Code Online (Sandbox Code Playgroud)
对getSession(false)的调用永远不会返回null,但与返回的会话对象关联的所有属性都为null.我目前通过搜索空属性来检测用户是否已注销,但这似乎不正确.
我正在使用JSF2.我已经实现了一个自定义面部servlet,如下所示:
public class MyFacesServletWrapper extends MyFacesServlet {
// ...
}
Run Code Online (Sandbox Code Playgroud)
其中我正在进行一些授权检查并在用户未登录时发送重定向:
public void service(ServletRequest request, ServletResponse response) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (...) {
String loginURL = req.getContextPath() + "/LoginPage.faces";
res.sendRedirect(loginURL);
}
}
Run Code Online (Sandbox Code Playgroud)
这在用户尝试导航到另一个页面时有效.但是,当JSF命令链接/按钮提交JSF表单时,这不起作用.该行sendRedirect()线被击中并执行,没有异常被抛出了,但用户停留在同一页面.基本上,根本没有视觉变化.
为什么这适用于页面导航,而不是表单提交?
我有一个servlet和一个HTML页面.如何在注销后阻止用户点击浏览器的后退按钮?我在stackoverflow中读过相同的问题,但答案是使用浏览器历史记录禁用java脚本或使用页面 - 在http标头中没有缓存.我们如何使用阻止返回操作的servlet来实现它,http-header没有缓存是无用的,因为Firefox表示页面已经过期,当它再次刷新两次显示安全页面时.
我已经完成了一个方法,示例方法只是为了尝试(不是真实的)我的用户名和密码从HTML页面发布到servlet,如果密码和用户名是正确的,servlet将其存储在会话中.再次请求安全页面时,如果会话存在,则显示安全页面,并且用户从登录页面显示的会话中注销所有正在工作的ID,除非用户点击浏览器的后退按钮时注销失败.
如何防止安全servlet在注销后显示内容,然后在浏览器中按下后退按钮?
welcome.html的src
<html>
<body>
<form method="POST" action="Sessionexample">
<div align="center">
<table border="1" style="border-collapse: collapse">
<tr>
<td>Username</td>
<td><input type="text" name="username" size="20"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" name="password" size="20"></td>
</tr>
<tr>
<td height="24"> </td>
<td height="24"> </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Submit" name="B1"></td>
</tr>
</table>
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
servlet的src
public class Sessionexample extends HttpServlet implements Servlet , Filter {
private static final long serialVersionUID = 1L;
public String username =null, password=null;
public HttpSession session ;
public PrintWriter pw;
int …Run Code Online (Sandbox Code Playgroud) java ×6
servlets ×5
jsf ×3
javascript ×2
jsf-2 ×2
jsp ×2
back-button ×1
browser ×1
caching ×1
http ×1
http-headers ×1
https ×1
java-ee ×1
login ×1
redirect ×1
servlet-3.0 ×1
session ×1