为什么我的 JavaScript 代码在所请求的资源上没有出现“Access-Control-Allow-Origin'header”错误

而Postman就没问题?
我正在尝试通过连接到内置在 Flask 中的 RESTful API 来使用 JavaScript 进行授权。 但是,当我提出请求时,我会得到以下错误:
无法加载 http://myapiurl/login。 请求的资源上没有“访问控制允许原点”头。 因此,“ null”是不允许访问的。
我知道 API 或远程资源必须设置表头,但为什么当我通过 Chrome 扩展Postman发出请求时,它还能工作呢?
请求代码如下:

$.ajax({
    type: "POST",
    dataType: 'text',
    url: api,
    username: 'user',
    password: 'pass',
    crossDomain : true,
    xhrFields: {
        withCredentials: true
    }})
    .done(function( data ) {
        console.log("done");
    })
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
        alert(textStatus);
    });

3个回答

如果我理解正确的话,那么你正在对页面不同的域执行 XMLHttpRequest。 因此,出于安全原因,浏览器屏蔽了它,因为它通常允许同一源的请求。当你希望执行跨域请求时,需要执行一些不同的操作。关于如何实现这一点的一个教程是使用 CORS。
When you are using they are not restricted by this policy. Quoted from Cross-Origin XMLHttpRequest:
当您使用 postman时,不受此策略的限制。
常规 web 页面可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但是它们受到同源策略的限制。 扩展并不是那么有限。 扩展可以与原始服务器之外的远程服务器通信,只要它首先请求跨原始权限即可。

这不是针对生产或应用程序必须显示给客户机,只有当 UI 和后端开发位于不同的服务器上并且在生产环境中它们实际上位于同一台服务器上时,这才有帮助。例如: 在为任何应用程序开发 UI 时,如果需要对其进行本地测试并将其指向后端服务器,那么这是一个完美的修复方案。 对于生产修复,CORS 头必须添加到后端服务器,以允许跨原点访问。
简单的方法是在 google chrome 中添加扩展,以允许使用 CORS 进行访问。
只要您希望允许访问没有'access-control-allow-origin'表头请求的情况下,就启用此扩展。
或者
在 Windows 中,将此命令粘贴到运行窗口中
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
这将打开一个新的 chrome 浏览器,它不允许访问“访问控制允许来源”表头的请求。

如果您可以处理 JSON 作为return,那么尝试使用 JSONP :

$.ajax({
  type: "POST",
  dataType: 'jsonp',
  ...... etc ......

了解有关使用 JSONP 的更多信息,请点击这里here:
Jsonp 的出现---- 实质上是一个双方同意的跨网站脚本黑客---- 为强大的内容混搭打开了大门。许多著名的站点提供 JSONP 服务,允许您通过预定义的 API 访问它们的内容。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在Java Web当中,有什么工具可以将被请求的js、css文件进行这样的处理?

请教一个东西~ 据你所知,有什么东西可以在Web服务器上这样用,在浏览器请求某一些js、css文件的时候,自动处理成mini版。 ​ 例如,我的css文件的内容是这样的 .div-items { width: 100%; display: none; position: absolute; } 经过处理之后是这样的 .div-items{width: 100%;display: none;position: absolute;} 问题补充: 我公司有一个系统,里面专门是给人家做展示信息用。里面展示的信息不多,一般就7、8个页面。 但是,每一组页面的样式、模板(模板的数量现在有80多个,预计到11月末会达到130左右)都是不一样的,所以这就引发出有好多js、css文件。 现在希望可以通过转换成mini版,来减轻服务器的压力,如果情况允许还希望转换输出的html代码。 同时还有,在一些js、css上面会写入一些注释,我还想这些工具会自动过滤掉这些注释。

ajax get 本地请求,执行error函数却不报其他错误

js代码: ``` $.ajax({ url:"js/orderMeal.json", type:"get", dataType:"json", async:true, data:{}, error:function(){ console.log("对不起,请求出错!"); }, success:function(data){ console.log(data); } }) ``` json代码: ``` { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" } ``` 然后控制台只打印出“对不起,请求出错!”,Network preview 里面可以看到json ![图片说明](https://img-ask.csdn.net/upload/201901/31/1548923962_929566.png) 哪位大神指点指点,不胜感激!!!

求大神:nginx配置全局静态资源,但是加载不到项目的js

1.nginx配置全局静态资源,但是加载不到项目的js了 ``` upstream getway_pool_hh{ server 127.0.0.1:8068; } ``` ``` server { listen 80; server_name 112.124.202.74; access_log logs/1.log; error_log logs/12.error; location / { index index.html; } location ~ .*\.(jpg|gif|png|css|js|html|txt)$ { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; gzip on; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/css text/javascript image/jpeg image/gif image/png; root /usr/local/sss/resource; } location ~ .*\.(eot|svg|ttf|woff|otf)$ { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; gzip on; gzip_http_version 1.1; gzip_comp_level 2; gzip_types application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml; root /usr/local/sss/resource; } error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /getway { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://getway_pool_hh; } } ``` ``` ```

IE浏览器加载的资源不全?

使用IE 或者edge浏览器,请求登录页,正常情况下有下面7个请求 ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501190_603384.png) 当首次请求登录页或者清除浏览器缓存后,请求总是会少一两个,而且每次总是出现在不同文件上,导致页面总是缺东西 ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501152_24148.png) ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501163_757241.png) ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501174_436174.png) 此时如果刷新一次就没问题了 ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501183_367194.png) 不知道这是为什么,其他的浏览器都没问题,资源的路径应该也没问题,因为单独去请求是可以加载的,而且这次是这个没有加载,下次又是那个没有加载,不是同一个资源出现问题。 html代码如下: ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501642_447254.png) ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570501650_547183.png) ------------------------------------------------------------------------- 补充说明: 经过抓包分析发现,在那些未加载资源的tcp连接中,浏览器已经发送了SYN包,但是服务器没有回,retransmisson两次之后就关闭了,所以TCP连接都没有建立,自然无法请求资源。比较IE和chrome的不同,IE的retransmission的RTO时间比较短,分别在1s,3s后重传 ![图片说明](https://img-ask.csdn.net/upload/201910/14/1571042331_131097.png) chrome是在3s,9s后重传 ![图片说明](https://img-ask.csdn.net/upload/201910/14/1571042339_414979.png) 但是在IE中同样的重传时间,有时候就可以成功建立连接 ![图片说明](https://img-ask.csdn.net/upload/201910/14/1571042534_987871.png) TCP/IP用的是uip协议栈 还是不知道什么原因

SpringMVC提交put,delete请求405

请求删除操作报:HTTP Status 405 - Request method 'POST' not supported 已经在web.xml配置,HiddenHttpMethodFilter过滤器 jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>主页面</title> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> </head> <body> <form action="" method="post"> <input type="hidden" value="DELETE" name="_method"/> </form> <table border="1"> <tr> <th>编号</th> <th>用户名</th> <th>密码</th> <th>邮箱</th> <th>操作</th> </tr> <c:forEach items="${requestScope.list}" var="list"> <tr> <td>${list.userId}</td> <td>${list.userName}</td> <td>${list.password}</td> <td>${list.email}</td> <td> <a href="update" class="update">修改</a> <a href="user/${list.userId}" class="delete">刪除</a> </td> </tr> </c:forEach> </table> <br> <br> </body> </html> <script> $(function(){ $(".delete").click(function(){ var href=$(this).attr("href"); $("form").attr("action",href).submit(); return false; }); }); </script> SpringMVC-servlet.xml配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd " default-autowire="byName"> <!-- 启用spring mvc 注解 --> <context:annotation-config /> <mvc:annotation-driven /> <!-- 处理静态资源 --> <mvc:default-servlet-handler/> <!--对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="suffix" value=".jsp"></property> </bean> <context:component-scan base-package="com.tang" /> <!-- 获取数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/springmvc"></property> <property name="username" value="root"></property> <property name="password" value="123"> </property> </bean> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> <!-- 给jdbc模板注入数据源 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> </beans> controller代码: package com.tang.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.tang.dao.UserDao; import com.tang.pojo.User; @Controller public class LoginController { @Autowired private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @ModelAttribute public void test(){ System.out.println("LoginController.test()"); } @RequestMapping("/login") public String doLogin(String username,String password,ModelMap map){ User user=userDao.doLogin(username, password); if(user!=null){ List<User> list=userDao.findAll(); map.put("list", list); return "index"; }else{ return "login"; } } @RequestMapping(value="/update",method=RequestMethod.PUT) public String doUpdate(User user,ModelMap map){ userDao.doUpdate(user); List<User> list=userDao.findAll(); map.put("list", list); return "index"; } @RequestMapping(value="/user/{id}",method=RequestMethod.DELETE) public String doDelete(@PathVariable("id")Integer id,ModelMap map){ userDao.doDelete(id); List<User> list=userDao.findAll(); map.put("list", list); return "index"; } }

关于图片预加载的一些疑惑

var a = ['ima/lbj2.jpg','ima/KcR8-htwhfzt1608509.jpg']; for (var i = 0;i<2;i++){ var img = new Image(); img.src = a[i]; if (img.complete) { console.log('dd') } } 列入上面的代码,第一次刷新网页没有打印dd。第二次刷新还是没有打印dd,,请教一下懂得大神们,预加载到底是什么原理,第一次加载完图片难道没有存在缓存里吗?为什么第一次加载完后 第二次刷新img.complete还是为false,

SpringMVC+JQuery ajax 总会跳转到一个输出返回值json页面

``` 前台代码 <script type="text/javascript"> function saveShopping(){ var tsid =[] $("input[name='tsid']:checked").each(function(){ tsid.push($(this).val()); if(tsid.length==0){ alert("你没有选择任何图书"); } }); alert(tsid); var url ="${pageContext.request.contextPath}/savaShopping?tsid="+tsid; if(tsid!=null){ alert(url); $.ajax({ url:url, type:"post", dataType:"json", async:false, beforeSend:function(data){ alert("发送成功"); }, success:function(data){ alert(data.msg); }, error:function(){ alert("出现错误"); } } ); }else{ alert("请选择购买的书籍") } } </script> 后台controler //放入购物车 @RequestMapping(value="savaShopping") @ResponseBody public Map saveShopping(@RequestParam String[] tsid){ for (int i = 0; i < tsid.length; i++) { long date1 = new Date().getTime(); BC_shopping shopping = new BC_shopping(); shopping.setS_date(date1); shopping.setS_num(1); shopping.setS_b_id(Integer.parseInt(tsid[i])); shoppingService.insertShopping(shopping); } Map<String, String> map = new HashMap<String, String>(); map.put("msg", "加入购物车成功"); return map; } 配置文件 <!-- 使spring扫描包下的所有类,让标注spring注解的类生效 --> <context:component-scan base-package="com.bk"/> <mvc:annotation-driven></mvc:annotation-driven> <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 访问静态资源 --> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <!-- 完成请求和注解POJO的映射 --> <!--springmvc 3.1之前的配置 --> <!-- <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonConverter"/> </list> </property> </bean> --> <!--springmvc 3.1之后的配置 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" p:ignoreDefaultModelOnRedirect="true" > <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> </bean> ajax能 success 能接受到 返回的map之后 就跳转到下面的页面 图片上传不成功:就是在页面展示出map的json格式,就是在页面有一句 {"msg":"加入购物车成功"}

JS 时间刷新代码,求高手帮忙修改一下!万分感谢!

下面是我两段代码,是关于时间的代码 第一段代码,不知道为什么时间,时间走着走着会变慢。他是当用户最开始访问页面时加载了时间戳,接下来除非用户主动刷新页面不让就浏览器自己渲染走时间。 第二段代码,时间是准确,毕竟每秒都ajax请求服务器时间来校准前端,但给服务器带来了不少的压力。 目前我为了时间准确我用第二段代码,但服务器压力真的好大啊,想改进一下。希望高手帮帮忙,改进能保准时间的同时用不要给服务器太大的压力。 我要的结果是,前端浏览器渲染时间每秒刷新,但每隔1分钟由ajax请求服务器时间校准一次前台的时间,当然用户自己主动刷新页面时肯定也是请求服务器校准。 第二段代码目前是前台渲染和请求服务器都是一秒。我不知道这么拆分开。帮忙拆分一下,把请ajax求时间独立出来设置。 求高手解决!!!!!!!!!!!!!!!谢谢! 如果哪个高手再慷慨点,解决上面问题的同时再补充完善下面我说的想法我就跪谢了,我的想法是:此网页在用户浏览器当前窗口时ajax请求服务器校准时间是每分钟校准一次,但当此页面不在用户浏览器当前窗口时ajax不请求服务器校准,只保持前端浏览器渲染的每秒刷新,但当用户切换此网页为当前窗口时ajax立刻请求服务器校准时间,然后,如果保持此页面在当前窗口就按上面的每分钟请求服务器校准一次,如果又不在当前窗口了就又不需要请求服务器校准时间了。其实就是减少服务器的压力,怕有些用户一直打开网页不关闭或不在当前页面时继续消耗服务器的资源。如果哪个高手有既保证时间准确有减少服务器压力的方法也可以提供。谢谢。 第一段代码: ``` <SCRIPT LANGUAGE="JavaScript"> var timerID; var past_time=0; function tzone(ts) { this.ct = new Date(0); this.ts = ts; } function UpdateClocks() {past_time++; var ct = new Array(new tzone(1584189923),new tzone(1584200723),new tzone(1584146723),new tzone(1584164723),new tzone(1584193523),new tzone(1584189923),new tzone(1584161123)) ; var dt = new Date() ; var startDST = new Date(dt.getFullYear(), 3, 1) ; while (startDST.getDay() != 0) startDST.setDate(startDST.getDate() + 1) ; var endDST = new Date(dt.getFullYear(), 9, 31) ; while (endDST.getDay() != 0) endDST.setDate(endDST.getDate() - 1) ; var ds_active ; if (startDST < dt && dt < endDST) ds_active = 1; else ds_active = 0; var printstr = ""; gmdt = new Date(); for (n=0 ; n<ct.length ; n++) { ct[n].ct = new Date((ct[n].ts+past_time) * 1000) ; } document.getElementById('Clockk0').innerHTML = ClockString(ct[0].ct); document.getElementById('Clockk1').innerHTML = ClockString(ct[1].ct); document.getElementById('Clockk2').innerHTML = ClockString(ct[2].ct); document.getElementById('Clockk3').innerHTML = ClockString(ct[3].ct); document.getElementById('Clockk4').innerHTML = ClockString(ct[4].ct); document.getElementById('Clockk5').innerHTML = ClockString(ct[5].ct); document.getElementById('Clockk6').innerHTML = ClockString(ct[6].ct); timerID = window.setTimeout("UpdateClocks()", 1001);} function ClockString(dt) { var stemp ; var dt_year = dt.getUTCFullYear(); var dt_month = dt.getMonth() + 1; var dt_day = dt.getDate(); var dt_hour = dt.getHours(); var dt_minute = dt.getMinutes(); var dt_second = dt.getSeconds(); dt_year = dt_year.toString(); if (dt_hour < 10) dt_hour = '0' + dt_hour ; if (dt_minute < 10) dt_minute = '0' + dt_minute ; if (dt_second < 10) dt_second = '0' + dt_second ; //stemp = dt_month + '月' + dt_day + '日'; stemp = ' <span>' + dt_hour + "</span>:<span>" + dt_minute + "</span>:<span>" + dt_second + "</span>"; return stemp ; } </script> ``` 第二段代码: ``` <script language="JavaScript"> var timerID ; var past_time=1; function tzone(os, ds, cl) { this.ct = new Date(0) ; // datetime this.os = os ; // GMT offset this.ds = ds ; // has daylight savings this.cl = cl ; // font color } function UpdateClocks() { past_time++; var timerID = null; var timerRunning = false; var ct = new Array( new tzone(+8, 0, 'silver'), /*北京#50#0*/ new tzone(+11, 0, 'silver'), /*堪培拉#145#1*/ new tzone(-5, 0, 'silver'), /*华盛顿#111#2*/ new tzone(+1, 0, 'silver'), /*巴黎#67#3*/ new tzone(+9, 0, 'silver'), /*东京#31#4*/ new tzone(+8, 0, 'silver'), /*北京#50#5*/ new tzone(+0, 0, 'silver'), /*伦敦#96#6*/ new tzone(+3, 0, 'silver'), /*莫斯科#58#7*/ new tzone(+5.50, 0, 'silver'), /*新德里#46#8*/ new tzone(+0, 0, 'silver'), /*伦敦#96#9*/ new tzone(+8, 0, 'silver'), /*北京#50#10*/ new tzone(-3, 0, 'silver'), /*智利-圣地亚哥#132#11*/ new tzone(+9, 0, 'silver'), /*东京#31#12*/ new tzone(+2, 0, 'silver'), /*南非-开普敦#185#13*/ new tzone(+11, 0, 'silver'), /*堪培拉#145#14*/ new tzone(+13, 0, 'silver'), /*惠灵顿#146#15*/ /*new tzone(+0, 0, 'silver'), 纽约*/ new tzone(-5, 0, 'silver') /*华盛顿#111#16*/ ); // Adjust each clock offset if that clock has DS and in DS. // for(n=0 ; n<ct.length ; n++) // if (ct[n].ds == 1 && ds_active == 1) ct[n].os++ ; // compensate time zones var printstr = ""; var dateObj; var urlStr = "/skins/unixtime/date/index.php" + "?" + new Date().getTime(); $.ajax({ url: urlStr, async: false, success: function(data){ dateObj = new Date(data); } }); //gmdt = new Date($.ajax({async: false}).getResponseHeader("Date")) ; gmdt = new Date(dateObj) ; for (n=0 ; n<ct.length ; n++) { ct[n].ct = new Date((gmdt.getTime()/1000 + ct[n].os * 3600) * 1000) ; //ct[n].ct = new Date((past_time+gmdt.getTime()/1000 + ct[n].os * 3600) * 1000) ; //ct[n].ct = new Date(gmdt.getTime()+1000 + ct[n].os * 3600 * 1000) ; } document.getElementById('Clockk0').innerHTML = ClockString(ct[0].ct); document.getElementById('Clockd0').innerHTML = ClockdString(ct[0].ct); document.getElementById('Clocksjd0').innerHTML = ClocksjdString(ct[0].ct); /*document.getElementById('Clocks0').innerHTML = ClocksString(ct[0].ct);*/ document.getElementById('Clockk1').innerHTML = ClockString(ct[1].ct); document.getElementById('Clockd1').innerHTML = ClockdString(ct[1].ct); document.getElementById('Clockk2').innerHTML = ClockString(ct[2].ct); document.getElementById('Clockd2').innerHTML = ClockdString(ct[2].ct); document.getElementById('Clockk3').innerHTML = ClockString(ct[3].ct); document.getElementById('Clockd3').innerHTML = ClockdString(ct[3].ct); document.getElementById('Clockk4').innerHTML = ClockString(ct[4].ct); document.getElementById('Clockd4').innerHTML = ClockdString(ct[4].ct); document.getElementById('Clockk5').innerHTML = ClockString(ct[5].ct); document.getElementById('Clockd5').innerHTML = ClockdString(ct[5].ct); document.getElementById('Clockk6').innerHTML = ClockString(ct[6].ct); document.getElementById('Clockd6').innerHTML = ClockdString(ct[6].ct); document.getElementById('Clockyyr7').innerHTML = ClockyyrString(ct[7].ct); document.getElementById('Clockyyr8').innerHTML = ClockyyrString(ct[8].ct); document.getElementById('Clockyyr9').innerHTML = ClockyyrString(ct[9].ct); document.getElementById('Clockyyr10').innerHTML = ClockyyrString(ct[10].ct); document.getElementById('Clockyyr11').innerHTML = ClockyyrString(ct[11].ct); document.getElementById('Clockyyr12').innerHTML = ClockyyrString(ct[12].ct); document.getElementById('Clockyyr13').innerHTML = ClockyyrString(ct[13].ct); document.getElementById('Clockyyr14').innerHTML = ClockyyrString(ct[14].ct); document.getElementById('Clockyyr15').innerHTML = ClockyyrString(ct[15].ct); document.getElementById('Clockyyr16').innerHTML = ClockyyrString(ct[16].ct); timerID = window.setTimeout("UpdateClocks()", 940) ; //timerRunning = true; } function ClockString(dt) { var stemp ; var dt_year = dt.getUTCFullYear() ; var dt_month = dt.getUTCMonth() + 1 ; var dt_day = dt.getUTCDate() ; var dt_hour = dt.getUTCHours() ; var dt_minute = dt.getUTCMinutes() ; var dt_second = dt.getUTCSeconds() ; dt_year = dt_year.toString() ; if (dt_hour < 10) dt_hour = '0' + dt_hour ; if (dt_minute < 10) dt_minute = '0' + dt_minute ; if (dt_second < 10) dt_second = '0' + dt_second ; // stemp = dt_hour + ":" + dt_minute + " " ; //stemp = dt_month + '月' + dt_day + '日'; stemp = ' <span>' + dt_hour + "</span>:<span>" + dt_minute + "</span>:<span>" + dt_second + "</span>"; return stemp ; } function ClockdString(dt) { var stemp ; var dt_year = dt.getUTCFullYear() ; var dt_month = dt.getUTCMonth() + 1 ; var dt_day = dt.getUTCDate() ; var dt_days = dt.getUTCDay() ; var weekDay = ["天", "一", "二", "三", "四", "五", "六"]; dt_year = dt_year.toString() ; stemp = dt_year + '年' + dt_month + '月' + dt_day + '日,星期'+ weekDay[dt_days]; return stemp ; } function ClocksString(dt) { var stemp ; var dt_second = dt.getUTCSeconds() ; stemp = dt_second + ' 秒'; return stemp ; } function ClockyyrString(dt) { var stemp ; var dt_year = dt.getUTCFullYear() ; var dt_month = dt.getUTCMonth() + 1 ; var dt_day = dt.getUTCDate() ; var dt_hour = dt.getUTCHours() ; var dt_minute = dt.getUTCMinutes() ; var dt_second = dt.getUTCSeconds() ; dt_year = dt_year.toString() ; if (dt_hour < 10) dt_hour = '0' + dt_hour ; if (dt_minute < 10) dt_minute = '0' + dt_minute ; if (dt_second < 10) dt_second = '0' + dt_second ; // stemp = dt_hour + ":" + dt_minute + " " ; //stemp = dt_month + '月' + dt_day + '日'; stemp = dt_year + '/' + dt_month + '/' + dt_day +' '+ dt_hour + ':' + dt_minute + ':' + dt_second; return stemp ; } function ClocksjdString(dt) { var stemp ; var dt_hour = dt.getUTCHours() ; if(dt_hour <= 6){dt_sjd = '凌晨'} else if (dt_hour <= 8){dt_sjd = '早晨';} else if (dt_hour <= 11){dt_sjd = '上午';} else if (dt_hour <= 13){dt_sjd = '中午';} else if (dt_hour <= 17){dt_sjd = '下午';} else if (dt_hour <= 19){dt_sjd = '傍晚';} else if (dt_hour <= 22){dt_sjd = '晚上';} else {dt_sjd = '深夜';} stemp = '当前为:' + dt_sjd; return stemp ; } //UpdateClocks(); </script> ```

怎么禁止从浏览器访问js文件?

怎么禁止从浏览器访问js文件? 如:访问http://10.40.76.59:8080/mdmc/public/check.js时,自动跳转到http://10.40.76.59:8080/mdmc/login.jps

Java_爬虫,如何抓取Js动态生成数据的页面?

<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p> </p> <p> </p> <p> </p> <p>很多网站是用js或Jquery 生成数据的,到后台获取到数据以后,用 document.write()或者("#id").html="" 的方式 写到页面中,这个时候用浏览器查看源码是看不到数据的。<br><br>HttpClient是不行的,看网上说HtmlUnit,说  可以获取后台js加载完后的完整页面,但是我按照文章上说的 写了 ,都不好使。</p> <pre name="code" class="java">String url = "http://xinjinqiao.tprtc.com/admin/main/flrpro.do"; try { WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10); //设置webClient的相关参数 webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setCssEnabled(false); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); //webClient.getOptions().setTimeout(50000); webClient.getOptions().setThrowExceptionOnScriptError(false); //模拟浏览器打开一个目标网址 HtmlPage rootPage = webClient.getPage(url); System.out.println("为了获取js执行的数据 线程开始沉睡等待"); Thread.sleep(3000);//主要是这个线程的等待 因为js加载也是需要时间的 System.out.println("线程结束沉睡"); String html = rootPage.asText(); System.out.println(html); } catch (Exception e) { } </pre> <p> </p> <p>其实这段代码不好使。<br><br><br>求解答,其中典型的就是这个链接的页面,怎么能在java程序中获取其中的数据?<br><br>http://xinjinqiao.tprtc.com/admin/main/flrpro.do</p> <p> </p> <p> </p> </div>

微信小程序图片加载不出来,请大佬帮忙。

其他图片可以加载,就段代码里的图片加载不出来,下面附上代码 proData(id){ switch(parseInt(id)){ case 80: return this.setData({ title:'1号技师', number: 1, poll: 10, imageUrl:[ {url:`${rootUrl2}/images/upload/touxiang02.png` }, ], info:`自己的介绍`, infoImgs:[ {url:`${rootUrl2}/images/upload/touxiang02.png` }, ] });

怎样设置指定的域名,访问指定的网站链接

如: www.A.com/123.html, 网站这个链接,只能从www.google.com的来路打开. 手动浏览器输入地址无法进入,如何才能实现。 我安装了一个护卫神的网站访问控制系统,可还是无法实现. 我复制其他人的网站里的代码。可是我却无法实现。感觉好像是加载了JS代码一样、 求各位技术哥哥帮帮我 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <div style="display:none;"> </div> <h3>页面跳转中……<a id="gourl" href="#">立即跳转</a></h3> <script type="text/javascript"> var url = GetQueryString("url"); if(!url){ url = getCookie("go"); if(url){ setCookie("go","",-1); }else{ url = "/"; } } gourl(url); function gourl(url){ document.getElementById("gourl").setAttribute("href",url); setTimeout(function(){ window.location.href=url; },500); } function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); return null; } function setCookie(name,value,exptime){ var expires = '';   if(exp>0){ var exp = new Date();   exp.setTime(exp.getTime() + exptime);//单位毫秒 expires = "expires=" + exp.toGMTString();   } document.cookie = name + "="+ escape (value) + ";"+expires; } function getCookie(name){   var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));   if(arr != null)         return unescape(arr[2]);   return null; } </script> </body> </html>

使用nodejs如何做一个对外接口,接收对方传送的数据?

由于是新手,我的系统需要从对方系统里提取数据,实现方法可以由对方提供接口我查询即可,但对方不同意,让我提供接口,他们直接进行传输到我的接口,如何实现?求思路,若能提供完整代码更好!

如何实现动态修改css js引入路径

如何实现动态修改css js引入路径 如下图所示: ![图片说明](https://img-ask.csdn.net/upload/201901/24/1548313547_69662.png)![图片说明](https://img-ask.csdn.net/upload/201901/24/1548313561_863004.png) js修改base路径之后css可修改成功 script的src也修改成功但是没有请求新的src对应的代码

用JS动态添加iframe到页面,这个iframe网页内容加载不出来

用JS动态添加一段HTML代码到页面,且该段HTML中有内嵌iframe,现在这个iframe网页内容加载不出来. $("#divid").find("table[id=table_sdwan_branch]").last().after($("#div_sdwan_branch_show").get(0).innerHTML); 类似这样一段js,通过页面按钮触发js事件,将这部分内容拼接到页面表格中. 然后再刷新此iframe,iframe页面展现报错. 在Jsp页面写这个iframe是没问题的 <div id="div_sdwan_branch_show" name="div_sdwan_branch_show"> <table border="1" cellpadding='0' cellspacing='0' id="table_sdwan_branch"> <tr> ......... <td colspan="5"><iframe id="RLER_1" name="RLER_1" width="756" height="180" src="/GTBSS/pages/common/getRelationOrder.jsp" frameborder="0"></iframe></td> </tr>........</table> ``` ```! ![图片说明](https://img-ask.csdn.net/upload/201801/19/1516352025_513566.png) 查看js添加的无法展现的部分,报错.将页面的js都删除也还是报错. ![图片说明](https://img-ask.csdn.net/upload/201801/19/1516351884_526952.png)

post提交form表单到springMVC,不能跳转问题

**项目结构: ** ![图片说明](https://img-ask.csdn.net/upload/201812/14/1544768206_941826.png) 1. jsp页面 **index.jsp** ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>首页</title> </head> <body> <a href="/sdkapp/init">去往登录页</a> </body> </html> ``` **login.jsp** ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录页</title> <script src="<%=request.getContextPath()%>/js/jquery-1.7.2.js" type="text/javascript"></script> </head> <body> <form id="frm"> 用户id: <input type="text" name="uid"><br><br> 用户名: <input type="text" name="username"><br><br> 密 码: <input type="password" name="password"><br><br> <input type="submit" id="btn" value="登录"> </form> <script type="text/javascript"> $("#btn").click(function () { console.log(getFormJson(frm)); $.ajax({ url: "${pageContext.request.contextPath}/sdkapp/login", type:"POST", data: getFormJson(frm), contentType:"application/json;charset=utf-8", success:function(data){ console.log(data) }, error:function(data){ console.log(data) } }); }) function getFormJson(frm) { //frm:form表单的id var o = {}; var a = $("#"+frm).serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [ o[this.name] ]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; } </script> </body> </html> ``` **success.jsp** ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录成功页</title> </head> <body> <h1>登录成功</h1> </body> </html> ``` 2. 配置文件 **springmvc.xml** ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置默认的servlet处理器,处理静态资源加载--> <mvc:default-servlet-handler/> <!--配置包扫描controller--> <context:component-scan base-package="controller"/> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans> ``` **web.xml** <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <servlet-name>springMvc</servlet-name> <!--加载前端控制器--> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 3.java代码 **Login.java** ``` package controller; import controller.vo.User; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @RestController @RequestMapping(value = "/sdkapp") public class Login { @RequestMapping(value = "/init") public ModelAndView casdkbindInput(){ ModelAndView view = new ModelAndView("/login"); return view; } @RequestMapping(value = "/login",method = {RequestMethod.POST},consumes = "application/json;charset=utf-8") public ModelAndView testJson(@RequestBody User user) throws Exception { System.out.println(user); ModelAndView view = new ModelAndView("/success"); return view; } } ``` **vo/User.java** ``` package controller.vo; import java.io.Serializable; public class User implements Serializable { private String uid; private String username; private String password; public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "uid='" + uid + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } } ``` 问题是 jq post请求到后台,后台返回 view时,前端接收不到? 附上demo地址:[百度云盘](https://pan.baidu.com/s/1edbTMGCw2wrhGKADY9x8XA "")

不进Struts拦截器,麻烦帮解决,谢谢~~~~~

test.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>AJAX提交请求测试页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="js/jquery-1.8.0.js"></script> <script type="text/javascript" src="js/json.js"></script> </head> <script language="javascript"> $(document).ready(function(){ $("#btn").click(function(){ $.ajax({ url: "Essa", type: "POST", data: {"AppCode":"51601","DataSets":"1","Datas":"[{'name':'fsg','pwd':'1'}]"}, dataType: "json", success:function(data) { var jsonStr = eval("("+data+")"); alert(data); //document.getElementById("info").innerHTML = "retAppCode: [ "+jsonStr.retAppCode+" ] DataSets: [ "+jsonStr.retDataSets+" ] 信息:[ "+jsonStr.retDatas[0].info+" ] "; //alert("success:OperCode="+jsonStr.OperCode); //alert("success:DataSets="+jsonStr.DataSets); //alert("success:Datas[0].name="+jsonStr.Datas[0].name); //alert("success:Datas[0].age="+jsonStr.Datas[0].age); }, error:function(data) { alert("error:"); } }); }); }); </script> <body> <div id="info"></div> <s:submit value="%{getText('test')}" id="btn"/> </body> </html> struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include file="struts-default.xml"/> <package name="essa" extends="json-default"> <interceptors> <interceptor name="myInterceptor" class="com.essa.Interceptor.MyInterceptor"> <param name="filterURISwitch">/welcome.html;/login;/html/help;</param></interceptor> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="myInterceptor" /> <interceptor-ref name="json" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack" /> <default-action-ref name="index"></default-action-ref> <global-results> <result name="failPage" type="redirect">/login.jsp</result> </global-results> <action name="index"> <result type="redirect">/welcome.html</result> </action> <action name="Essa" class="com.essa.action.EssaAction"> <result type="json"><param name="root">result</param></result> </action> <action name="LoginAction" class="com.essa.action.LoginAction"> <result name="LoginOK" type="dispatcher">/website/home.jsp</result> <result name="LoginFail" type="redirect">/loginFail.html</result> <result name="Normal" type="redirect">/welcome.html</result> <result name="Help" type="dispatcher">/html/help/help.html</result> </action> </package> <constant name="struts.locale" value="zh_CN"></constant> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.action.extension" value="action"/> </struts> 拦截器 package com.essa.Interceptor; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; /** * @name MyInterceptor * @time 2015-06-20 * @version 1.0.0 * @author ZhangDongxu */ public class MyInterceptor implements Interceptor { private static Logger logger = Logger.getLogger(MyInterceptor.class .getName()); private HttpServletRequest request; private HttpSession session; private ServletContext application; private ActionContext context; private String filterURISwitch ; private String sessionUID; private String sessionPASS; /** * 自定义拦截器执行的代码 作用:拦截请求 * */ private static final long serialVersionUID = 1L; public String getFilterURISwitch() { return filterURISwitch; } public void setFilterURISwitch(String filterURISwitch) { this.filterURISwitch = filterURISwitch; } public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception { logger.info(">>>>>> [请求信息:执行了自定义拦截器的代码!!!!=============================]"); System.out.println("===================================================="); System.out.println(this.filterURISwitch); System.out.println("===================================================="); String filterURISwitch = this.filterURISwitch;// 分号分隔的过滤器路径,即哪些不需要进行资源过滤拦截:例如/essa/welcome.html;/essa/html/help.html操作手册 String[] noFilterURIs;// 临时数组 System.out.println("过滤前提示"); System.out.println("===================================="); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++"); System.out.println("获取不需要进行过滤URI的初始化参数值: " + filterURISwitch); noFilterURIs = filterURISwitch.split(";"); int pathFilterLength = filterURISwitch.split(";").length; int filesFilterLength = filterURISwitch.split("\\.").length - 1; int pathsSize = pathFilterLength - filesFilterLength; // 不需要过滤的具体请求的页面,带扩展名 String[] noDealURIPages = new String[filesFilterLength]; // 不需要过滤的路径 // 控制用户访问权限 context = invocation.getInvocationContext(); request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST); session = request.getSession(); String[] noDealURIPaths = new String[pathFilterLength]; String currentURI = request.getRequestURI();// 当前请求的页面URI String ctx = request.getContextPath(); currentURI = currentURI.substring(ctx.length()); System.out.println("currentURI = " + currentURI); // 提取不需要过滤的页面及路径数组,便于进行过滤 int j = 0; int k = 0; for (int i = 0; i < pathFilterLength; i++) { if (noFilterURIs[i].split("\\.").length == 2) { noDealURIPages[j] = noFilterURIs[i]; j++; } else { noDealURIPaths[k] = noFilterURIs[i]; k++; } } System.out.println("1、不需要进行过滤安全保护的静态资源路径数量 = " + pathsSize); for (int i = 0; i < k; i++) { System.out.println("paths = " + noDealURIPaths[i]); } System.out.println("2、不需要进行过滤安全保护的访问页面资源数量 = " + filesFilterLength); for (int i = 0; i < j; i++) { System.out.println("pages = " + noDealURIPages[i]); } System.out.println("+++++++++++++++++++++++++++++++++++++++++++++"); // 基于实际请求的情况,判断session中UID和具体的PASS是否存在,进行业务操作。所有的判断安全均在ACTION中完成。过滤器不进行业务方面的操作 if (currentURI.equalsIgnoreCase("/LoginAction.action")) { // 获取JSON结构中的data:UID,PASS值 sessionUID = request.getParameter("name"); sessionPASS = request.getParameter("pwd"); session.setAttribute("sessionUID", sessionUID); session.setAttribute("sessionPASS", sessionPASS); // 放行。让其走到下个链或目标资源中 return "LoginOK"; } // 判断是否是配置不进行过滤的页面 for (int i = 0; i < noDealURIPages.length; i++) { if (currentURI.equalsIgnoreCase(noDealURIPages[i]) && (session.getAttribute("sessionUID") != null || session.getAttribute("sessionPASS") != null)) { System.out.println("noDealURIPages=" + noDealURIPages[i]); // 放行。让其走到下个链或目标资源中 return "Normal"; } } // 判断是否是配置不进行过滤的路径 for (int i = 0; i < noDealURIPaths.length; i++) { if (currentURI.substring(0, currentURI.lastIndexOf("/")) .equalsIgnoreCase(noDealURIPaths[i]) || currentURI.equalsIgnoreCase(noDealURIPaths[i]) && (session.getAttribute("sessionUID") != null || session.getAttribute("sessionPASS") != null)) { System.out.println("noDealURIPaths=" + noDealURIPaths[i]); // 放行。让其走到下个链或目标资源中 return "Help"; } } // 如果不是上述情况,则判断是否存在UID和PASS,并进行逻辑操作链 if (session.getAttribute("sessionUID") == null || session.getAttribute("sessionPASS") == null) { session.invalidate(); //res.sendRedirect("http://localhost/login/login.html"); return "failPage"; } return invocation.invoke();// "failPage" } } 不进拦截器,test.jsp直接返回error

springboot2框架搭建的前后端分离系统,session很快就丢失了

基于springboot搭建的后台框架,做了跨域,能访问到接口,后台设置了拦截器 ````@Component public class LoginInterceptor implements HandlerInterceptor { //这个方法是在访问接口之前执行的,只需要在这里写验证登录状态的业务逻辑,就可以在用户调用指定接口之前验证登录状态 public boolean preHandle(HttpServletRequest request, HttpSession session, HttpServletResponse response, Object handler) throws Exception { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse rep = (HttpServletResponse) response; rep.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin")); rep.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); rep.setHeader("Access-Control-Max-Age", "3600"); rep.setHeader("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE"); rep.setHeader("Access-Control-Allow-Credentials","true"); //是否支持cookie跨域 String loginName = (String) session.getAttribute("loginName"); System.out.println("loginName======"+loginName); if (loginName == null || loginName.equals("")){ return false; }else { return true; } } ```` @Configuration public class WebConfigurer implements WebMvcConfigurer { @Autowired private LoginInterceptor loginInterceptor; // 这个方法用来配置静态资源,如html,js,css等 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**"); } //设置跨域访问 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedHeaders("*") .exposedHeaders("access-control-allow-headers", "access-control-allow-methods", "access-control-allow-origin", "access-control-max-age", "X-Frame-Options") .allowedMethods("GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "TRACE") .allowCredentials(true).maxAge(3600); } // 这个方法用来注册拦截器,写好的拦截器需要通过这里添加注册才能生效 @Override public void addInterceptors(InterceptorRegistry registry) { // addPathPatterns("/**") 表示拦截所有的请求,excludePathPatterns("/login", "/register") 表示除了登陆与注册之外 registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/loginAndInit", "/registerUser", "/getUsers"); } } yml配置文件部分 ```` #服务器配置,配80能够省去地址后的端口号 server: port: 80 session-timeout: 3600 * 24 * 7 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 前端html页面使用ajax调用,加了 ````crossDomain:true, xhrFields: { withCredentials: true }, async:true, 但是每次登录后一分钟不访问就掉了,明明设置的都是3600以上了,再掉其他接口后台取session存的值时就成null了。求大佬解答!!感激不尽!!明天要演示系统,头很大!!!

安卓WebView加载不出指定网页

package com.example.webviewdemo; import android.support.v7.app.ActionBarActivity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ProgressBar; import android.widget.Toast; import android.annotation.SuppressLint; import android.os.Bundle; public class MainActivity extends ActionBarActivity { private WebView webview; private ProgressBar pb; private EditText edt; private ImageButton refresh; private ImageButton go; private String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } @SuppressLint("SetJavaScriptEnabled") private void init() { // TODO Auto-generated method stub //进度条绑定视图,并设置进度条的最大值 pb = (ProgressBar) findViewById(R.id.pb); pb.setMax(100); //EditText绑定视图 edt=(EditText) findViewById(R.id.edt); url=edt.getText().toString(); //imageButton绑定视图 //刷新按钮 refresh=(ImageButton) findViewById(R.id.refresh); refresh.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub webview.loadUrl(webview.getUrl()); Toast.makeText(MainActivity.this, "刷新", Toast.LENGTH_SHORT).show(); } }); //跳转按钮 go=(ImageButton) findViewById(R.id.go); go.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub webview.loadUrl(url); Toast.makeText(MainActivity.this, "跳转", Toast.LENGTH_SHORT).show(); } }); //绑定WebView视图 webview=(WebView) findViewById(R.id.webview); //WebView加载web资源,同时也可以加载本地资源,将写好的HTML文件放在assets文件夹下,然后调用即可 // webview.loadUrl(url); webview.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { pb.setVisibility(View.GONE); } else { // if (View.INVISIBLE == pb.getVisibility()) { pb.setVisibility(View.VISIBLE); // } pb.setProgress(newProgress); } super.onProgressChanged(view, newProgress); } }); //覆盖WebView默认从第三方浏览器打开网页的行为,直接从WebView中打开网页 webview.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(edt.getText().toString()); return true; } //WebViewClient帮助WebView去处理一些网页控制和请求 }); //设置启用javaScript WebSettings websetting=webview.getSettings(); websetting.setJavaScriptEnabled(true); websetting.setSupportZoom(true); websetting.setUseWideViewPort(true); websetting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } //设置点击返回键返回上一个页面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()){ webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } } xml代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ProgressBar android:id="@+id/pb" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="8dip" android:indeterminateOnly="false" android:max="100" android:progressDrawable="@drawable/progress_bar_states" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dip" android:orientation="horizontal" android:background="@drawable/title_bg"> <EditText android:id="@+id/edt" android:layout_width="match_parent" android:layout_height="40dp" android:layout_weight="3" android:textColor="#000" android:hint="@string/edittext"/> <ImageButton android:id="@+id/refresh" android:layout_width="50dp" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_weight="1" android:background="@drawable/refresh" android:contentDescription="@null" /> <ImageButton android:id="@+id/go" android:layout_width="50dp" android:layout_height="40dp" android:layout_weight="1" android:background="@drawable/go" android:contentDescription="@null" /> </LinearLayout> <WebView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/webview" /> </LinearLayout> 功能是在输入框中输入网址,然后点击跳转会跳转到指定网页,不知道为什么网页就是加载不出来,百度了半天没个结果。。。求解答

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐