[英]How to redirect to a page when session times out?
我遇到一个问题,我的页面上有一个会话超时,而会话超时时为之创建的html页面将进入该页面。 但是,现在会话超时时,它会转到我不希望的index page
。 有什么方法可以将用户重定向到超时页面? 谢谢。
这是我的代码。
<!DOCTYPE html>
<html>
<head>
<title>Session Expired</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style type="text/css">
html {
font-family: sans-serif;
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article,
aside,
footer,
header,
nav,
section {
display: block
}
h1 {
font-size: 2em;
margin: .67em 0
}
figcaption,
figure,
main {
display: block
}
figure {
margin: 1em 40px
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
a:active,
a:hover {
outline-width: 0
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
text-decoration: underline dotted
}
b,
strong {
font-weight: inherit
}
b,
strong {
font-weight: bolder
}
code,
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -.25em
}
sup {
top: -.5em
}
audio,
video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button,
input,
optgroup,
select,
textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button,
input {
overflow: visible
}
button,
select {
text-transform: none
}
[type=reset],
[type=submit],
button,
html [type=button] {
-webkit-appearance: button
}
[type=button]::-moz-focus-inner,
[type=reset]::-moz-focus-inner,
[type=submit]::-moz-focus-inner,
button::-moz-focus-inner {
border-style: none;
padding: 0
}
[type=button]:-moz-focusring,
[type=reset]:-moz-focusring,
[type=submit]:-moz-focusring,
button:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
border: 1px solid silver;
margin: 0 2px;
padding: .35em .625em .75em
}
legend {
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type=checkbox],
[type=radio] {
box-sizing: border-box;
padding: 0
}
[type=number]::-webkit-inner-spin-button,
[type=number]::-webkit-outer-spin-button {
height: auto
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type=search]::-webkit-search-cancel-button,
[type=search]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details,
menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
body,
html {
width: 100%;
height: 100%;
background-color: #21232a
}
body {
color: #fff;
text-align: center;
text-shadow: 0 2px 4px rgba(0, 0, 0, .5);
padding: 0;
min-height: 100%;
-webkit-box-shadow: inset 0 0 75pt rgba(0, 0, 0, .8);
box-shadow: inset 0 0 75pt rgba(0, 0, 0, .8);
display: table;
font-family: "Open Sans", Arial, sans-serif
}
h1 {
font-family: inherit;
font-weight: 500;
line-height: 1.1;
color: inherit;
font-size: 36px
}
h1 small {
font-size: 68%;
font-weight: 400;
line-height: 1;
color: #777
}
a {
text-decoration: none;
color: #fff;
font-size: inherit;
border-bottom: dotted 1px #707070
}
.lead {
color: silver;
font-size: 21px;
line-height: 1.4
}
.cover {
display: table-cell;
vertical-align: middle;
padding: 0 20px
}
footer {
position: fixed;
width: 100%;
height: 40px;
left: 0;
bottom: 0;
color: #a0a0a0;
font-size: 14px
}
</style>
</head>
<body>
<div class="cover">
<h1>Your session has expired due to inactivity. </h1>
<h1> Please login again
<a href="index.xhtml">here</a>. Thank you.</h1>
</div>
</body>
</html>
在过滤器中尝试一下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
{
String ipAddress = request.getRemoteAddr();
System.out.println("IP " + ipAddress + ", Time " + new Date().toString());
boolean authorized = false;
String username = null;
String role = null;
if (request instanceof HttpServletRequest)
{
HttpSession session = ((HttpServletRequest) request).getSession(false);
if (session != null)
{
username = (String) session.getAttribute("username");
role = (String) session.getAttribute("role");
if (username != null && role != null)
authorized = true;
}else{
((HttpServletResponse)response).sendRedirect("showlogin");
//or response.sendError(..) etc.
return ;
}
}
在Java上,您具有httpSessionListener接口。 实现此接口时,必须实现2个方法:
sessionCreated(httpSessionEvent e) sessionDestroyed(httpSessionEvent e)
会话终止时会激活SessionDestroyed。因此您可以将代码放入此方法中。
编辑:
Class Listen implements httpSessionListener {
Public void SessionDestroyed (httpSessionEvent e){
//Redirection code
}
}
//Web.xml:
<Listener>
<Listener-class>path of class</listener-class>
</Listener>
XML侦听器标记必须在servlet标记之外。
用户友好的解决方案是使javascript-timeout的持续时间与sessiontimeout相同,并在结束前60秒钟弹出一个窗口,以警告用户有关此问题的信息...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.