使用cookie servlets jsp的注销表单[重复]
Posted
技术标签:
【中文标题】使用cookie servlets jsp的注销表单[重复]【英文标题】:logout form using cookies servlets jsp [duplicate] 【发布时间】:2016-10-25 07:24:59 【问题描述】:我正在尝试在 java 中制作一个注销表单,并且我正在使用 cookie。但问题是,当我点击后退按钮时,它会将我重定向到我不想要的最后一个安全页面。
这是我的代码: 小服务程序:
@WebServlet(name="LogOut", urlPatterns="/LogOut")
public class LogOut extends HttpServlet
protected void doPost(HttpServletRequest req, HttpServletResponse response1)
throws ServletException, IOException
Cookie[] cookies = req.getCookies();
if(cookies != null)
for(Cookie cookie : cookies)
if(cookie.getName().equals(req.getSession().getAttribute("email")))
System.out.println( req.getSession().getAttribute("email") +cookie.getValue());
cookie.setMaxAge(0);
response1.addCookie(cookie);
//invalidate the session if exists
HttpSession session = req.getSession(false);
System.out.println("User="+req.getSession().getAttribute("email"));
if(session != null)
session.invalidate();
//no encoding because we have invalidated the session
response1.sendRedirect("index.html");
filter:
@WebFilter("/NoCacheFilter")
public class NoCacheFilter implements Filter
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); //Proxies.
chain.doFilter(req, res);
jsp:
<form action="logout" method="post">
<a><button type = "submit" class = "myprofile>Deconectare</button></a>
</form>
web.xml:
<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>user.LogOut</servlet-class>
</servlet>
<filter>
<filter-name>nocachefilter</filter-name>
<filter-class>user.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>nocachefilter</filter-name>
<url-pattern>/logout</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
有人可以帮我吗?谢谢!
【问题讨论】:
【参考方案1】:问题是当你点击返回按钮时,页面是从缓存而不是浏览器加载的。 您可以使用此答案提供的解决方案来避免从缓存中加载:
Prevent user from seeing previously visited secured page after logout
您的 servlet 和过滤器应该是两个不同的类。 在您的情况下,您使用的是与 Servlet 和 Filter 相同的类。
<servlet-class>user.LogOut</servlet-class>
<filter-class>user.LogOut</filter-class>
创建一个 Servlet 类..以及该类的 cookie 逻辑。
public class LogOutServlet extends HttpServlet
protected void doPost(HttpServletRequest req,
HttpServletResponse response1) throws ServletException, IOException
Cookie[] cookies = req.getCookies();
if (cookies != null)
for (Cookie cookie : cookies)
if(cookie.getName().equals(req.getSession().getAttribute("email")))
System.out.println(req.getSession().getAttribute("email")
+ cookie.getValue());
cookie.setMaxAge(0);
response1.addCookie(cookie);
你的 web.xml 为: 您必须分别为每个过滤器和 servlet 指定过滤器映射和 servlet-mapping 元素。在您的文件中,logout servlet 缺少 servlet-mapping,filter 缺少 filter-mapping。
<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>user.LogOut</servlet-class>
</servlet>
<filter>
<filter-name>nocachefilter</filter-name>
<filter-class>user.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>nocachefilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
【讨论】:
当我尝试像您的示例那样实现时,我的整个程序都不起作用。 Err:'Starting Tomcat Server at localhost 遇到问题。Server Tomcat Sever at local host failed to start'. 您是否正确地更改了 web.xml 文件?启动tomcat时有什么异常? 我已经更新了我的问题。你能看看吗?我的例外是:org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext [/e-health_nutrition]];原因:java.lang.IllegalArgumentException: Invalid<filter> <filter-name>LogOutFilter</filter-name> <filter-class>user.LogOut</filter-class> </filter> <filter-mapping> <filter-name>LogOutFilter</filter-name> <url-pattern>/logout</url-pattern> </filter-mapping> <servlet> <servlet-name>logout</servlet-name> <servlet-class>user.LogOut</servlet-class> </servlet> <servlet-mapping> <servlet-name>logout</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping>
你可以试试这个!另外,删除注释。使用 web.xml 映射或注释!
我进行了更改,但是如何在我的 jsp 中调用此过滤器? 我试过了,但没用: user.LogOut 不能转换为 javax.servlet.Servlet 我也更新了我的问题,看看我实现了什么以上是关于使用cookie servlets jsp的注销表单[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Pivotal Cloud Foundry 托管的 JSP/Servlet 应用程序从 SiteMinder 会话注销?