繁体   English   中英

会话超时时如何重定向到页面?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM