当前位置: 首页 > news >正文

做的ASP网站手机怎么给网站做 360快照

做的ASP网站手机,怎么给网站做 360快照,Wordpress+仿站+工具,找人做方案的网站持续学习持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01 环境搭建验证码倒计时短信服务邮件服务验证码短信形式#xff1a;邮件形式#xff1a; 异常机制MD5参考 环境搭建 C:\Windows\System32\drivers\etc\hosts 192.168.… 持续学习持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【17】认证服务01 环境搭建验证码倒计时短信服务邮件服务验证码短信形式邮件形式 异常机制MD5参考 环境搭建 C:\Windows\System32\drivers\etc\hosts 192.168.56.10 gulimall.com 192.168.56.10 search.gulimall.com 192.168.56.10 item.gulimall.com 192.168.56.10 auth.gulimall.comNginx配置记得使用Nginx动静分离 # ...http {# ...upstream gulimall {server 192.168.193.107:88;}include /etc/nginx/conf.d/*.conf; }网关 - id: gulimall_auth_routeuri: lb://gulimall-authpredicates:- Hostauth.gulimall.comgulimall-auth Controller public class LoginController {GetMapping(/login.html)public String loginPage() {return login;}GetMapping(/reg.html)public String regPage() {return reg;} }或者 Configuration public class GulimallWebConfig implements WebMvcConfigurer {/*** 视图映射*/Overridepublic void addViewControllers(ViewControllerRegistry registry) {/*** GetMapping(/login.html)* public String loginPage(){* //空方法* return login;* }*///只是get请求能映射registry.addViewController(/login.html).setViewName(login);registry.addViewController(/reg.html).setViewName(reg);} }验证码倒计时 前端 $(function () {$(#sendCode).click(function () {//2、倒计时if ($(this).hasClass(disabled)) {//正在倒计时。} else {//1、给指定手机号发送验证码// $.get(/sms/sendEmail?email $(#phoneNum).val(), function (data) {$.get(/sms/sendcode?phone $(#phoneNum).val(), function (data) {if (data.code ! 0) {alert(data.msg);}});timeoutChangeStyle();}});})var num 60;function timeoutChangeStyle() {$(#sendCode).attr(class, disabled);if (num 0) {$(#sendCode).text(发送验证码);num 60;$(#sendCode).attr(class, );} else {var str num s 后再次发送;$(#sendCode).text(str);setTimeout(timeoutChangeStyle(), 1000);}num--;}短信服务 购买短信套餐后扫码激活然后绑定测试手机号码 然后点击调用API发送短信 按钮 使用【专用】测试签名/模板 然后 发起调用 复制相关信息即可 增加权限授予RAM子账号SMS和MPush的权限。 dependencygroupIdcom.aliyun/groupIdartifactIdalibabacloud-dysmsapi20170525/artifactIdversion3.0.0/version/dependency// This file is auto-generated, dont edit it. Thanks. package com.atguigu.gulimall.auth.sms;import com.aliyun.auth.credentials.Credential; import com.aliyun.auth.credentials.provider.StaticCredentialProvider; import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient; import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest; import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse; import com.google.gson.Gson; import darabonba.core.client.ClientOverrideConfiguration;import java.util.concurrent.CompletableFuture;public class SendSms {public static void main(String[] args) throws Exception {// HttpClient Configuration/*HttpClient httpClient new ApacheAsyncHttpClientBuilder().connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds.responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds.maxConnections(128) // Set the connection pool size.maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds// Configure the proxy.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress(your-proxy-hostname, 9001)).setCredentials(your-proxy-username, your-proxy-password))// If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true)).x509TrustManagers(new X509TrustManager[]{}).keyManagers(new KeyManager[]{}).ignoreSSL(false).build();*/// Configure Credentials authentication information, including ak, secret, tokenStaticCredentialProvider provider StaticCredentialProvider.create(Credential.builder()// Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set..accessKeyId(xxxx).accessKeySecret(xxxx)//.securityToken(System.getenv(ALIBABA_CLOUD_SECURITY_TOKEN)) // use STS token.build());// Configure the ClientAsyncClient client AsyncClient.builder().region(cn-shanghai) // Region ID//.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient).credentialsProvider(provider)//.serviceConfiguration(Configuration.create()) // Service-level configuration// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc..overrideConfiguration(ClientOverrideConfiguration.create()// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi.setEndpointOverride(dysmsapi.aliyuncs.com)//.setConnectTimeout(Duration.ofSeconds(30))).build();// Parameter settings for API requestSendSmsRequest sendSmsRequest SendSmsRequest.builder().signName(阿里云短信测试).templateCode(xxxx).phoneNumbers(xxxx).templateParam({\code\:\1111\})// Request-level configuration rewrite, can set Http request parameters, etc.// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())).build();// Asynchronously get the return value of the API requestCompletableFutureSendSmsResponse response client.sendSms(sendSmsRequest);// Synchronously get the return value of the API requestSendSmsResponse resp response.get();System.out.println(new Gson().toJson(resp));// Asynchronous processing of return values/*response.thenAccept(resp - {System.out.println(new Gson().toJson(resp));}).exceptionally(throwable - { // Handling exceptionsSystem.out.println(throwable.getMessage());return null;});*/// Finally, close the clientclient.close();}}简单把这些代码整改一下 Configuration public class SMSConfig {Value(${spring.cloud.alicloud.access-key})private String accessId;Value(${spring.cloud.alicloud.secret-key})private String secretKey;Beanpublic StaticCredentialProvider provider() {return StaticCredentialProvider.create(Credential.builder().accessKeyId(accessId).accessKeySecret(secretKey).build());}}RestController public class SendSmsController {Autowiredprivate StaticCredentialProvider provider;/*** 提供接口供别的服务调用** param phone* param code* return body: {* bizId: 774515119736291045^0,* code: OK,* message: OK,* requestId: D6BD5A90-8755-5C82-B631-0F40AB7B41B0* }*/GetMapping(/sms/send)public R sendSms(RequestParam(phone) String phone, RequestParam(code) String code) throws ExecutionException, InterruptedException {AsyncClient client AsyncClient.builder().region(cn-shanghai) // Region ID.credentialsProvider(provider).overrideConfiguration(ClientOverrideConfiguration.create().setEndpointOverride(dysmsapi.aliyuncs.com)).build();SendSmsRequest sendSmsRequest SendSmsRequest.builder().signName(阿里云短信测试).templateCode(SMS_154950909).phoneNumbers(phone).templateParam({\code\:\ code \}).build();CompletableFutureSendSmsResponse response client.sendSms(sendSmsRequest);SendSmsResponse resp response.get();/*{headers: {Keep-Alive: timeout\u003d25 ......},statusCode: 200,body: {bizId: 774515119736291045^0,code: OK,message: OK,requestId: D6BD5A90-8755-5C82-B631-0F40AB7B41B0}}*/client.close();if (resp.getBody().getMessage().equalsIgnoreCase(OK)) return R.ok();return R.error(BizCodeEnume.SMS_SEND_EXCEPTION);}}邮件服务 dependencygroupIdjavax.mail/groupIdartifactIdmail/artifactIdversion1.4.1/version /dependencyData public class EmailVo {private String receiveMail;private String subject;private String content; } Configuration public class EmailConfig {// 我在Nacos配置中心配的user和passwordValue(${mail.user})private String mailUser;Value(${mail.password})private String mailPassword;Beanpublic Properties props() {// 创建Properties 类用于记录邮箱的一些属性Properties props new Properties();// 表示SMTP发送邮件必须进行身份验证props.put(mail.smtp.auth, true);//此处填写SMTP服务器props.put(mail.smtp.host, smtp.qq.com);//端口号QQ邮箱端口587props.put(mail.smtp.port, 587);// 此处填写写信人的账号props.put(mail.user, mailUser);// 此处填写16位STMP口令props.put(mail.password, mailPassword);return props;}Beanpublic Authenticator authenticator(Properties props) {// 构建授权信息用于进行SMTP进行身份验证return new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName props.getProperty(mail.user);String password props.getProperty(mail.password);return new PasswordAuthentication(userName, password);}};} }RestController public class SendEmailController {Autowiredprivate Properties props;Autowiredprivate Authenticator authenticator;PostMapping(/email/send)public R sendEmail(RequestBody EmailTo emailTo) throws MessagingException {// 使用环境属性和授权信息创建邮件会话Session mailSession Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message new MimeMessage(mailSession);// 设置发件人InternetAddress form new InternetAddress(props.getProperty(mail.user));message.setFrom(form);// 设置收件人的邮箱InternetAddress to new InternetAddress(emailTo.getReceiveMail());message.setRecipient(Message.RecipientType.TO, to);// 设置邮件标题message.setSubject(emailTo.getSubject());// 设置邮件的内容体message.setContent(emailTo.getContent(), text/html;charsetUTF-8);// 最后当然就是发送邮件啦Transport.send(message);return R.ok();}}验证码 短信形式 GetMapping(/sms/sendcode)public R sendCode(RequestParam(phone) String phone) { // Redis缓存验证码存起来方便下次校验 以及 可以给验证码设置有效期String code getRandomCode().toString();// 防止同一个手机号在60s内再次发送验证码String key AuthServerConstant.SMS_CODE_CACHE_PREFIX phone;String oldCode stringRedisTemplate.opsForValue().get(key);if (!StringUtils.isEmpty(oldCode)) {long l Long.parseLong(oldCode.split(_)[1]);if (System.currentTimeMillis() - l 60000) { // 如果时间间隔小于60sreturn R.error(BizCodeEnume.SMS_MULTI_EXCEPTION);}}// R r thirdPartyFeignService.sendSms(phone, code); // if (r.getCode() BizCodeEnume.SUCCESS.getCode()) { // code code _ System.currentTimeMillis(); // stringRedisTemplate.opsForValue().set(key, code, 5, TimeUnit.MINUTES); //过期时间5分钟 // } // return r;CompletableFuture.runAsync(() - thirdPartyFeignService.sendSms(phone, code), threadPool);CompletableFuture.runAsync(() - {stringRedisTemplate.opsForValue().set(key, codeResolve(code), 5, TimeUnit.MINUTES); //过期时间5分钟}, threadPool);return R.ok();}生成验证码随机四位数 private Integer getRandomCode() {//4位数字验证码想要[1000,9999]也就是[1000,10000)// Math.random() - [0, 1) // (int) Math.random()永远为0// Math.random() * (end - begin) - [0, end - begin)// begin Math.random() * (end - begin) - [begin, end)int code (int) (1000 Math.random() * (10000 - 1000));return code;}邮件形式 GetMapping(/sms/sendEmail)public R sendEmailCode(RequestParam(email) String email) throws MessagingException {String code UUID.randomUUID().toString().substring(0, 5);String key AuthServerConstant.EMAIL_CODE_CACHE_PREFIX email;String oldCode stringRedisTemplate.opsForValue().get(key);if (!StringUtils.isEmpty(oldCode)) { // 说明5分钟内已经给该邮箱发送过验证码了long l Long.parseLong(oldCode.split(_)[1]);if (System.currentTimeMillis() - l 60000) { // 如果时间间隔小于60sreturn R.error(BizCodeEnume.SMS_MULTI_EXCEPTION);}}CompletableFuture.runAsync(() - {// 给Redis放置验证码String realSaveCode code _ System.currentTimeMillis();stringRedisTemplate.opsForValue().set(key, realSaveCode, 5, TimeUnit.MINUTES); //过期时间5分钟}, threadPool);CompletableFuture.runAsync(() - {// 发送邮件try {EmailTo emailTo new EmailTo();emailTo.setReceiveMail(email);emailTo.setContent(验证码 code ——有效期5分钟);emailTo.setSubject(欢迎注册);thirdPartyFeignService.sendEmail(emailTo);} catch (MessagingException e) {e.printStackTrace();}}, threadPool);return R.ok();}异常机制 PostMapping(/regist)public R regist(RequestBody MemberRegistVo vo){try{memberService.regist(vo);}catch (PhoneExistException e){return R.error(BizCodeEnume.PHONE_EXIST_EXCEPTION);}catch (UsernameExistException e){return R.error(BizCodeEnume.USER_EXIST_EXCEPTION);}return R.ok();}Overridepublic void regist(MemberRegistVo vo) {//检查用户名和手机号是否唯一。为了让controller能感知异常异常机制String phone vo.getPhone(); checkPhoneUnique(phone);String userName vo.getUserName(); checkUsernameUnique(userName);MemberEntity entity new MemberEntity();entity.setMobile(phone);entity.setUsername(userName);entity.setNickname(userName);//设置默认等级MemberLevelEntity levelEntity memberLevelDao.getDefaultLevel();entity.setLevelId(levelEntity.getId());//密码要进行加密存储。//当然也可以在前端就加密发过来BCryptPasswordEncoder passwordEncoder new BCryptPasswordEncoder();String encode passwordEncoder.encode(vo.getPassword());entity.setPassword(encode);//其他的默认信息//保存this.baseMapper.insert(entity);}Overridepublic void checkPhoneUnique(String phone) throws PhoneExistException {Integer mobile this.baseMapper.selectCount(new QueryWrapperMemberEntity().eq(mobile, phone));if (mobile 0) {throw new PhoneExistException();}}Overridepublic void checkUsernameUnique(String username) throws UsernameExistException {Integer count this.baseMapper.selectCount(new QueryWrapperMemberEntity().eq(username, username));if (count 0) {throw new UsernameExistException();}}public class UsernameExistException extends RuntimeException {public UsernameExistException() {super(用户名存在);} }R public class R extends HashMapString, Object {public static final String CODE code;public static final String MSG msg;public static final String DATA data;//利用fastjson进行逆转public T T getData(String key, TypeReferenceT typeReference) {Object data get(key);// 默认是mapString s JSON.toJSONString(data); // 得转为JSON字符串T t JSON.parseObject(s, typeReference);return t;}//利用fastjson进行逆转public T T getData(TypeReferenceT typeReference) {return getData(DATA, typeReference);}public R setData(Object data) {put(DATA, data);return this;}public R() {put(CODE, BizCodeEnume.SUCCESS.getCode());put(MSG, BizCodeEnume.SUCCESS.getMsg());}public static R error() {return error(服务器未知异常请联系管理员);}public static R error(String msg) { // 500return error(org.apache.http.HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);}public static R error(int code, String msg) {R r new R();r.put(CODE, code);r.put(MSG, msg);return r;}public static R error(BizCodeEnume bizCodeEnume) {R r new R();r.put(CODE, bizCodeEnume.getCode());r.put(MSG, bizCodeEnume.getMsg());return r;}public static R ok(String msg) {R r new R();r.put(MSG, msg);return r;}public static R ok(MapString, Object map) {R r new R();r.putAll(map);return r;}public static R ok() {return new R();}public R put(String key, Object value) {super.put(key, value);return this;}public Integer getCode() {return (Integer) this.get(CODE);}public String getMsg() {return (String) this.get(MSG);} }/**** TODO 写博客* 错误码和错误信息定义类* 1. 错误码定义规则为5位数字* 2. 前两位表示业务场景最后三位表示错误码。例如100001。* 10:通用 000:系统未知异常* 3. 维护错误码后需要维护错误描述将他们定义为枚举形式* 错误码列表* 10: 通用* 001参数格式校验* 11: 商品* 12: 订单* 13: 购物车* 14: 物流*/ public enum BizCodeEnume {SUCCESS(0, OK),HTTP_SUCCESS(200, OK),UNKNOW_EXCEPTION(10000,系统未知异常),VAILD_EXCEPTION(10001,参数格式校验失败),TOO_MANY_REQUEST(10002,请求流量过大),SMS_MULTI_EXCEPTION(10003,验证码获取频率太高请1分钟后再试),SMS_SEND_EXCEPTION(10004,验证码发送失败),SMS_CODE_EXCEPTION(10005,验证码错误),REG_ERROR_EXCEPTION(10006,用户名或手机已存在注册失败),PRODUCT_UP_EXCEPTION(11000,商品上架异常),USER_EXIST_EXCEPTION(15001,用户存在),PHONE_EXIST_EXCEPTION(15002,手机号存在),NO_STOCK_EXCEPTION(21000,商品库存不足),LOGINACCT_PASSWORD_INVAILD_EXCEPTION(15003,账号密码错误);private final int code;private final String msg;BizCodeEnume(int code,String msg){this.code code;this.msg msg;}public int getCode() {return code;}public String getMsg() {return msg;} }MD5 MD5Message Digest algorithm 5信息摘要算法 压缩性任意长度的数据算出的MD5值长度都是固定的。容易计算从原数据计算出MD5值很容易。抗修改性对原数据进行任何改动哪怕只修改1个字节所得到的MD5值都有很大区别。强抗碰撞想找到两个不同的数据使它们具有相同的MD5值是非常困难的。不可逆即使知道加密算法也不能反推出明文密码: MD5是一种信息摘要算法会损 失元数据所以不可逆出原数据是什么 但是由于MD5的抗修改性和强抗碰撞一个字符串的MD5值永远是那个值发明了彩虹表暴力 破解。所以MD5不能直接进行密码的加密存储 加盐 通过生成随机数与MD5生成字符串进行组合数据库同时存储MD5值与salt值。验证正确性时使用salt进行MD5即可 百度网盘的秒传在上传文件之前计算出该文件的MD5值看有没有人之前上传过也就是去匹配百度网盘的数据库中有没有相同的 MD5 值 如果有一样的就不用传了 RunWith(SpringRunner.class) SpringBootTest public class GulimallAuthApplicationTests {Testpublic void contextLoads() {//MD5是不可逆的但是利用它的抗修改性一个字符串的MD5值永远是那个值发明了彩虹表暴力破解。//所以MD5不能直接进行密码的加密存储; // String s DigestUtils.md5Hex(123456);//盐值加密随机值 加盐 $1$ 8位字符 // 只要是同一个材料做出来的饭是一样的如果给饭里随机撒点“盐”那么饭的口味就不一样了//123456System.currentTimeMillis();//想要再次验证密码咋办 将密码再进行盐值去数据库查当时保存的随机盐加密一次然后再去匹配密码是否正确 // String s1 Md5Crypt.md5Crypt(123456.getBytes()); //随机盐 // String s1 Md5Crypt.md5Crypt(123456.getBytes(),$1$qqqqqqqq); //指定盐 // System.out.println(s1);// 给数据库加字段有点麻烦Spring有好用的工具BCryptPasswordEncoder passwordEncoder new BCryptPasswordEncoder(); // String encode passwordEncoder.encode(123456); // $2a$10$coLmFyeppkTPTfD0RJgqL.nx33s0wvUmj.shqEM/6hvwOO4TWiGmy // $2a$10$4IP4F/2iFO2gbSvQKyJzGuI3RhU5Qdtr519KsyoXGAy.b7WT4P1RW // $2a$10$0hEI3vMkTbTqK76990MGu.s9QKrkjDSpgyhfzR4zsy07oKB9Jw.PS// System.out.println(encode); // boolean matches passwordEncoder.matches(123456, $2a$10$0hEI3vMkTbTqK76990MGu.s9QKrkjDSpgyhfzR4zsy07oKB9Jw.PS);boolean matches passwordEncoder.matches(lpruoyu123, $2a$10$m7TmOQAin5Tj6QzV1TT0ceW6iLypdN8LHkYP16DUEngJUfYNgWVEm);System.out.println(matches);} }参考 雷丰阳: Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目. 本文完感谢您的关注支持
文章转载自:
http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn
http://www.morning.pndw.cn.gov.cn.pndw.cn
http://www.morning.gqcd.cn.gov.cn.gqcd.cn
http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn
http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn
http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn
http://www.morning.kqlrl.cn.gov.cn.kqlrl.cn
http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn
http://www.morning.rbjf.cn.gov.cn.rbjf.cn
http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn
http://www.morning.litao7.cn.gov.cn.litao7.cn
http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn
http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn
http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn
http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn
http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn
http://www.morning.djxnn.cn.gov.cn.djxnn.cn
http://www.morning.rtbx.cn.gov.cn.rtbx.cn
http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn
http://www.morning.mtrrf.cn.gov.cn.mtrrf.cn
http://www.morning.lhgqc.cn.gov.cn.lhgqc.cn
http://www.morning.mm27.cn.gov.cn.mm27.cn
http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn
http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn
http://www.morning.fslrx.cn.gov.cn.fslrx.cn
http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn
http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn
http://www.morning.wcjk.cn.gov.cn.wcjk.cn
http://www.morning.kryr.cn.gov.cn.kryr.cn
http://www.morning.qnksk.cn.gov.cn.qnksk.cn
http://www.morning.mjpgl.cn.gov.cn.mjpgl.cn
http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn
http://www.morning.gqryh.cn.gov.cn.gqryh.cn
http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn
http://www.morning.skpdg.cn.gov.cn.skpdg.cn
http://www.morning.wbqt.cn.gov.cn.wbqt.cn
http://www.morning.yldgw.cn.gov.cn.yldgw.cn
http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn
http://www.morning.dbcw.cn.gov.cn.dbcw.cn
http://www.morning.mhlkc.cn.gov.cn.mhlkc.cn
http://www.morning.mtbth.cn.gov.cn.mtbth.cn
http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn
http://www.morning.xcszl.cn.gov.cn.xcszl.cn
http://www.morning.nsfxt.cn.gov.cn.nsfxt.cn
http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn
http://www.morning.gpcy.cn.gov.cn.gpcy.cn
http://www.morning.wyjhq.cn.gov.cn.wyjhq.cn
http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn
http://www.morning.drbwh.cn.gov.cn.drbwh.cn
http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn
http://www.morning.nbsfb.cn.gov.cn.nbsfb.cn
http://www.morning.wbqt.cn.gov.cn.wbqt.cn
http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn
http://www.morning.rxzcl.cn.gov.cn.rxzcl.cn
http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn
http://www.morning.fssjw.cn.gov.cn.fssjw.cn
http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn
http://www.morning.pfjbn.cn.gov.cn.pfjbn.cn
http://www.morning.rqkck.cn.gov.cn.rqkck.cn
http://www.morning.smyxl.cn.gov.cn.smyxl.cn
http://www.morning.ryznd.cn.gov.cn.ryznd.cn
http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn
http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn
http://www.morning.hqmfn.cn.gov.cn.hqmfn.cn
http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn
http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn
http://www.morning.btwrj.cn.gov.cn.btwrj.cn
http://www.morning.kdnbf.cn.gov.cn.kdnbf.cn
http://www.morning.glnmm.cn.gov.cn.glnmm.cn
http://www.morning.gychx.cn.gov.cn.gychx.cn
http://www.morning.nlysd.cn.gov.cn.nlysd.cn
http://www.morning.gqryh.cn.gov.cn.gqryh.cn
http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn
http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn
http://www.morning.mjzcp.cn.gov.cn.mjzcp.cn
http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn
http://www.morning.jphxt.cn.gov.cn.jphxt.cn
http://www.morning.csnch.cn.gov.cn.csnch.cn
http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn
http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn
http://www.tj-hxxt.cn/news/275585.html

相关文章:

  • 创建网站商城惠州seo公司
  • 网站制作是什么公司好看的网站建设
  • 清远做网站的公司设计新颖的网站建设
  • 上海网站营销怎么样网站建设一定要买数据盘吗
  • wap网站要花多少钱平台企业是什么意思
  • 城建网站论坛 建设北京住房与城乡建设厅网站首页
  • 江苏炒股配资网站开发晨阳seo顾问
  • 重庆哪里可以做公司网站网站开发 哪些技术
  • 局机关门户网站建设情况汇报优秀网站开发
  • ui设计方向网站建设目标做网站去哪里投放广告
  • 湛江网站制作推荐城乡住房和城乡建设部网站首页
  • 网站设计资源线上推广是什么意思
  • 网站开发资质电脑app制作教程
  • 苏州网站开发公司哪里济南兴田德润简介wordpress 网站上传到服务器
  • 多个网站给一个网站推广建设网站的机构
  • 做2手车网站需要多少钱启东市住房城乡建设局网站
  • 永久免费建站空间汕头市公司网站建设多少钱
  • 网站如何实现临时聊天微商推广网站怎么做
  • 做网站菏泽美间软装官网
  • 做亚马逊运营要看哪些网站网站建设的具体步骤有哪些
  • 杭州市社区建设网站旅游预定型网站建设
  • 福州网站改版目前做win7系统最好的网站
  • 网站建设公司新排行榜北仑网站制作
  • 做网站销售电销好做吗网站建设用户核心
  • 建设旅游网站目的安徽省住房建设部官方网站
  • 家政网站制作郑州网站制作推广公司
  • 优良的定制网站建设网站建设项目申请ppt
  • 图片生成器网站怎么用源码建站
  • asp网站开发实训报告wordpress 鼠标
  • 深圳网站建设app开发商业授权