我制作了一个非常简单的登录和会话结构,以便在未来基于JSP的应用程序中重用。是这样的:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<filter>
<filter-name>Access</filter-name>
<filter-class>com.app.Access</filter-class>
</filter>
<filter-mapping>
<filter-name>Access</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.app.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
// Check if the page's the login or if the user logged, else asks login
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
boolean logged = httpRequest.getSession(false) != null && httpRequest.getSession().getAttribute("user") != null;
if (httpRequest.getServletPath().equals("/login") || logged)
chain.doFilter(request, response);
else
((HttpServletResponse) response).sendRedirect(httpRequest.getContextPath() + "/login");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid())
request.setAttribute("failure", "session timeout");
request.getSession().setAttribute("user", null);
request.getRequestDispatcher("login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("user", new User());
response.sendRedirect("");
}
而位于WebContent根目录的login.jsp页面有一个
一种方法是让您的可公开访问的JSP(例如登录页面)完全不创建会话。请求JSP页面即默认情况下隐式创建会话。这可以通过在JSP顶部添加以下一行来实现:
<%@page session="false" %>
这样,request.getRequestedSessionID()
将返回null
,因此将绕过超时检查。只有当您实际登录用户时,才会以这种方式创建会话。我只从servlet中删除以下行,因为这没有意义,而且仍然会创建会话:
request.getSession().setAttribute("user", null);
我使用的是和和。一切都很好,但是当会话超时的时候,我会得到以下错误”,因为我已经在布局的main.gsp文件中调用了session变量。现在,我希望在每次会话超时后重定向到登录页面,并且不显示错误页面。要在会话超时后重定向,我已经在文件中这样做了 但是有这么多页,所以很难写每一页。还有其他的方法做这件事吗?请帮忙。
我在我的Angular 5应用程序中使用keycloak JavaScript适配器,虽然我的登录和重定向工作,但问题是每当我刷新我的ng应用程序时,它会再次要求keycloak登录,尽管我看到我的会话仍然在 /auth/realms/{image a领域名称}/帐户上处于活动状态。 正如我从KeyClope JS适配器文档中了解到的那样https://www.keycloak.org/docs/
所以我的问题是:什么是“客户端登录超时”,什么是一个好的默认设置?对我来说,一个完美的答案是在工作流失败时从用户的角度描述工作流(比如用户在点击电子邮件验证链接之前喝了一分钟咖啡)和/或进一步阅读的链接
我ogin.php 指数php 我做了一个登录脚本,打开,如果密码是正确的,我ndex.php网站。当第一次通过登录脚本打开ndex.php网站时,一切正常,会话设置完毕。但是在我刷新页面后,会话会被破坏,并且没有设置。那么我如何保存会话,这样它就不会因为刷新浏览器而被破坏呢?
我已经使用jsp创建了一个登录环境<代码>索引。jsp,登录。jsp。我从数据库中获取用户名和密码。如果用户名和密码与数据库匹配,则登录过程将完美完成。当用户给出错误的名称或密码时,它会显示错误消息,并重定向到登录页面。没什么问题,但我第一次登录时遇到了一个问题。提交错误名称或密码后显示错误消息的位置,该位置显示为空。 为什么显示null? 下面是我的代码 指数jsp login.jsp
我已经创建了一个默认的表单登录身份验证,下面是我的配置。 身份验证工作正常,但最近我在应用程序中添加了会话超时。我的应用程序每5秒轮询一次服务器,因此默认超时不起作用。我在谷歌上找到了下面的过滤器解决方案,并实现了它。 另外,2)我没有得到会话超时错误消息,因为它被重定向到这个页面,一次又一次地转到登录页面。我不能保存这个错误消息,直到用户再次登录。 有什么指示吗?