用AJAX实现“防止未登陆人员访问指定页面”的功能

为了保护科协官网不被未登录的同学访问,用ajax进行判断和跳转

小知识:用ajax访问的servlet的任何跳转都是无效的,所以跳转只能在js代码中进行

以下是servlet代码

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        // 若胆敢用首页url想直接进入首页,则进入get方法,然后重定向回登陆页面
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("KXlogin_username".equals(cookie.getName())) {//找到登陆过的证据(cookie)
                    //request.getRequestDispatcher("/kxpro_homePage/index.html").forward(request,response);// 转发请求至首页(隐藏首页url)
                    //response.sendRedirect("/KXpro/kxpro_homePage/index.html");
                    out.print("AnUser");break;
                } else {
                }
            }
        }else{
            out.print("NoCookie");
            //response.sendRedirect("/KXpro/kxpro_login/index.html");// 重定向回登陆页面
        }

    }

说明:从浏览器拿到cookie进行判断是否登录,有登陆就有cookie,没登陆就没有cookie,当看见这个cookie时马上out一串"AnUser",然后break出循环结束访问服务器,那么服务器就返回"AnUser"。

没有登陆过的有两种情况一种是浏览器有cookie但没有登录信息的cookie,另一种情况是根本就没有cookie,这两种情况前者返回空串,后者返回"NoCookie"串,然后以此为凭据在js中判断。

==================================================================================================================================

下面是js代码

<body >

    function createXMLHttpRequest() {
        var xmlHttp;
        // 适用于大多数浏览器,以及IE7和IE更高版本
        try {
            xmlHttp = new XMLHttpRequest();
        } catch (e) {
            // 适用于IE6
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                // 适用于IE5.5,以及IE更早版本
                try {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                }
            }
        }
        return xmlHttp;
    }

    function homePageLoad() {
        var xmlHttp = createXMLHttpRequest();
        xmlHttp.open("GET", "/KXpro/servlet/LoginServlet", true);
        xmlHttp.send(null);
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                //到这里就表示通讯成功,可以任意拿到text或者xml
                //使用var txt=xmlHttp.responseText;  获得text,text可以使json串
                //使用var xmls=xmlHttp.responseXML; 获得xml,不过解析起来比较麻烦
                var txt = xmlHttp.responseText;
                if (txt == "AnUser")//判断是否有登陆过的cookie
                {
                    //有登陆过,什么也不做
                } else {
                    window.location.href = "/KXpro/kxpro_login/index.html";//跳转到首页
                }
            }
        }
    }

整个ajax大框架在    http://www.cnblogs.com/sovagxa/articles/7241671.html   说的很清楚,就不再赘述了

拿到text串之后直接判断是否要跳转就行  跳转代码:

window.location.href = "/KXpro/kxpro_login/index.html";//跳转
时间: 2024-07-30 10:40:36

用AJAX实现“防止未登陆人员访问指定页面”的功能的相关文章

绕过禁止未登陆用户访问

某些网站禁止未登陆用户访问的.但它会对搜索引擎开绿灯,搜索引擎带来的SEO关键词流量是非常可观的,当你找到这样的网站,不得不用它时,只能按照网站的要求注册账号甚至交一定的会员费.接下来通过用身份欺骗绕过网站的访问权限限制,进而直接访问网站内容. 在User agent中去除Select automatically 的选择,最后在下拉菜单中选择Googlebot 以上配置完,浏览器当前标签页的访问就能欺骗你要访问网站,被当作google的爬虫来特殊对待,对你彻底的开放数据 原文地址:https:/

安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面

一.启动android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器.如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接. Intent intent =newIntent(); intent.setAction("android.intent.action.VIEW"); Uri content_url =Uri.parse("http://www.163.com"); int

微信内打开的网页不能下载APP,微信无法打开浏览器访问指定页面的解决方案交给gdtool

前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面临一个非常严重的问题,那就是用户体验差,用户量无法有效地累积起来,从而导致推广成本一直在增加,推广效率却无法有明显的提升. 所以针对这个问题,特写这篇文章来分享如何正常从微信内访问已经被拦截的链接,或者说如何有效地防止链接被微信拦截.此方法适用于安卓和苹果,且不需要安装任何软件和插件. ? 简单的处

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由:

答:通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性.代码如下: Intent intent = new Intent(); Intent.setAction("android.intent.action.View"); Uri uriBrowsers = Uri.parse("http://www.sina.com.cn"); Intent.setData(uriBrowsers); //包名.要打开的activ

使用httpClient访问指定网址

对于httpClient4.3访问指定页面,可以从下面的demo抽取方法使用. 注意:对于URL必须使用 http://开始,否则会有如下报错信息: Caused by: org.apache.http.ProtocolException: Target host is not specified at org.apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.java:69) at org.

AJAX请求遭遇未登录和Session失效的解决方案

使用技术:HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterCon

ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限

开发了一个导入TXT文件的功能,执行过程中出错.提示:.....ASP.NET 未被授权访问所请求的资源.请考虑授予 ASP.NET 请求标识访问此资源的权限.ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务).如果应用程序正在通过 <identity sonate="true"/> 模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户

Ajax POST数据访问PHP页面

<html> <body> <script type="text/javascript"> var ajax = null; if(window.XMLHttpRequest){//创建Ajax对象 ajax = new XMLHttpRequest(); }else if(window.ActiveXObject){ ajax = new ActiveXObject("Microsoft.XMLHTTP"); } if(ajax

C#用域账号登陆,访问网络路径

使用域账号登陆,访问网络路径 1 public class FileTool : IDisposable 2 { 3 [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 4 private static extern bool CloseHandle(IntPtr handle); 5 [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError =