dede二次开发织梦
来源:互联网 发布:苹果5s用不了4g网络 编辑:程序博客网 时间:2024/06/05 11:01
DEDE 区分 PC / 手机端 js (手机端PC端对应跳转)
<script type="text/javascript">function mobile_device_detect(url){ if(window.location.pathname != '/'){ url += window.location.pathname; } if(window.location.search != ''){ url += window.location.search; } var thisOS = navigator.platform; var device = new Array("iPhone","iPod","iPad","android","Nokia","SymbianOS","Symbian","Windows Phone","Phone","Linux armv71","MAUI","UNTRUSTED/1.0","Windows CE","BlackBerry","IEMobile"); for(var i=0;i<device.length;i++) { if(thisOS.match(device[i])) { window.location=url; } } //因为相当部分的手机系统不知道信息,这里是做临时性特殊辨认 if(navigator.platform.indexOf('iPad') != -1) { window.location=url; } //做这一部分是因为Android手机的内核也是Linux //但是navigator.platform显示信息不尽相同情况繁多,因此从浏览器下手,即用navigator.appVersion信息做判断 //------ 测试这部分导致不管pc还是手机都跳到手机端,所以先注释不用,测试就通过了! ------- //var check = navigator.appVersion; //if( check.match(/linux/i) ) //{ //X11是UC浏览器的平台 ,如果有其他特殊浏览器也可以附加上条件 // if(check.match(/mobile/i) || check.match(/X11/i)) // { // window.location=url; // } //} //类in_array函数 Array.prototype.in_array = function(e) { for(i=0;i<this.length;i++) { if(this[i] == e) return true; } return false; } }mobile_device_detect("http://地址/m");</script>
DEDE分页js
/** * 分页 * thisPage 当前页 * allPage 总页数 * url 跳转地址 * idName 选择器id名称(放置分页的位置) * showNum 展示几个页码 */function getPageShow(thisPage,allPage,rdurl,idName,showNum){var str = '<ul>'; if(rdurl){ } //根据当前页计算前后页数 var leftPage_num = Math.floor( showNum / 2 ); var rightPage_num = showNum - leftPage_num; //左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3 var left = thisPage - leftPage_num; left = Math.max(left,1); //左边最小不能小于1 var right = left + showNum - 1; //左边加显示页数减1就是右边显示数 right = Math.min(right, allPage); //右边最大不能大于总页数 left = Math.max(right - showNum + 1 , 1); //确定右边再计算左边,必须二次计算 if (thisPage > 1) { str += '<li><a href=" '+ rdurl + (Number(thisPage)-1) +'">上一页</a></li>'; }else{ str += '<li><a href="'+ rdurl + thisPage +'">上一页</a></li>'; } if(left > 1){ str += ' ..'; } for (var i = left; i <= right; i++) { if(thisPage == i){ str += '<li><a class="now_page" href="'+ rdurl + i +'">'+ i +'</a></li>'; } else{ str += '<li><a href="'+ rdurl + i +'">'+ i +'</a></li>'; } } if(right < allPage){ str += ' ..'; } if (thisPage == allPage) { str += '<li><a href="'+ rdurl + allPage +'">下一页</a></li>'; }else{ str += '<li><a href="'+ rdurl + (Number(thisPage)+1) +'">下一页</a></li>'; } str += '</ul>'; $("." + idName).html(str);}function getRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for ( var i = 0; i < strs.length; i++) { theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]); } } return theRequest;}
在DEDEcms的/member和/plus文件夹下,有许多模板需要调用当前模板的头部和尾部,
同时使用同一个变量<?php pasterTempletDiy("head.htm"); ?>会出现问题,plus能正常使用,而会员中心却打不开,
其实解决办法很简单,就是单独写变量。方法如下:
会员部分打开/member/config.php,在最下面添加如下代码
//引入arc.partview.class.php类处理 require_once(DEDEINC."/arc.partview.class.php"); function pasterTempletDiy($path) { global $cfg_basedir,$cfg_templets_skin; $tmpfile = $cfg_basedir.$cfg_templets_skin."/".$path;//模版文件的路径 $dtp = new PartView(); $dtp->SetTemplet($tmpfile); $dtp->Display(); }
对应模板用:
<?php pasterTempletDiy("head.htm"); ?><?php pasterTempletDiy("footer.htm"); ?>
/plus文件部分,把变量pasterTempletDiy换成变量pasterTempletDiy2即可:
//引入arc.partview.class.php类处理 require_once(DEDEINC."/arc.partview.class.php"); function pasterTempletDiy2($path) { global $cfg_basedir,$cfg_templets_skin; $tmpfile = $cfg_basedir.$cfg_templets_skin."/".$path;//模版文件的路径 $dtp = new PartView(); $dtp->SetTemplet($tmpfile); $dtp->Display(); }
对应模板用:
<?php pasterTempletDiy2("head.htm"); ?><?php pasterTempletDiy2("footer.htm"); ?>
{dede:php}标签循环嵌套方法:
{dede:php} $row = $dsql->Execute('me',"SELECT `id`,`typename`,`content` FROM dede_arctype WHERE `topid` = '上级id'"); //获取一个栏目下的分类while($arr = $dsql->GetArray('me')){ preg_match_all('#src\s*=\s*["\']?([^\s"\']*)#i', $arr['content'], $match); //栏目下分类的缩略图 :在栏目内容里设置一张图片,利用正则获取img下src的路径 foreach($match[1] AS $v) { echo '输出样式内容'; //$v是img下src的路径 $row1 = $dsql->Execute('me1',"SELECT `id`,`title`,`source`,`click` FROM dede_archives WHERE `typeid` =".$arr['id']); //根据获取当前$arr['id']获取文章 while($arr1 = $dsql->GetArray('me1')) { echo '输出样式内容' ; //$arr1文章对象 } }}{/dede:php}
DEDE内置标签:
图片集:
{dede:arclist addfields='piclinks字段名称' row='读取几行' typeid=上级id channelid='模型id'} <a href="#" target="_blank" class="course_[field:global.autoindex/]"><img src="[field:litpic/]"/></a>{/dede:arclist}
标签内判断变量:
[field:pubdate runphp=yes]if(){ @me = field:pubdate; //@me 就是[field:pubdate runphp=yes]里的field:pubdate}[/field:pubdate]
[field:array runphp=yes]if( $GLOBALS['autoindex'] == 1){ //$GLOBALS['autoindex'] 自增1,2,3 ,用于css样式 @me = ''; //@me = 对象 :@me['title'] 文章标题 .@me['litpic'] 文章缩略图}else{ @me = '';}[/field:array]
文章循环 -- 根据样式 $GLOBALS['autoindex']:
<!-- 文章列表 start --> {dede:channelartlist typeid=121 row=6} <div class="list tabs_news_{dede:global name='itemindex'/}"> {dede:arclist titlelen='42' row='30' orderby='pubdate' orderway='desc'} [field:array runphp=yes] $sum = $GLOBALS['dsql']->GetOne("SELECT COUNT(id) as sum FROM dede_archives WHERE typeid =".@me['typeid']); if($GLOBALS['autoindex']==$sum['sum'] && ($GLOBALS['autoindex'] -1) % 5 == 0){ @me = '<div class="box"> <div class="img"> <a href="'.@me['arcurl'].'"> <div class="play"> <h6>'.@me['title'].'</h6> </div> <img src="'.@me['litpic'].'" alt="'.@me['title'].'" /> </a> </div> <div class="newslist"> <ul></ul></div></div></div>'; }else if($GLOBALS['autoindex']==$sum['sum'] && $GLOBALS['autoindex'] % 5 == 0){ @me = '<li><strong> | </strong><a href="'.@me['arcurl'].'">'.@me['title'].'</a></li></ul></div></div></div>'; }else if(($GLOBALS['autoindex'] -1) % 5 == 0){ @me = '<div class="box"> <div class="img"> <a href="'.@me['arcurl'].'"> <div class="play"> <h6>'.@me['title'].'</h6> </div> <img src="'.@me['litpic'].'" alt="'.@me['title'].'" /> </a> </div> <div class="newslist"> <ul>'; }else if($GLOBALS['autoindex']%5 == 0){ @me = '<li><strong> | </strong><a href="'.@me['arcurl'].'">'.@me['title'].'</a></li></ul></div></div>'; }else{ if($GLOBALS['autoindex'] == $sum['sum']){ @me = '<li><strong> | </strong><a href="'.@me['arcurl'].'">'.@me['title'].'</a></li></ul></div></div></div>'; }else{ @me = '<li><strong> | </strong><a href="'.@me['arcurl'].'">'.@me['title'].'</a></li>'; } } [/field:array] {/dede:arclist} {/dede:channelartlist} <!-- 文章列表 end -->
dede评论重写
<?php/** * * Ajax评论 * * @version $Id: feedback_ajax.php 1 15:38 2010年7月8日Z tianya $ * @package DedeCMS.Site * @copyright Copyright (c) 2007 - 2010, DesDev, Inc. * @license http://help.dedecms.com/usersguide/license.html * @link http://www.dedecms.com */require_once(dirname(__FILE__).'/../include/common.inc.php');require_once(DEDEINC.'/channelunit.func.php');AjaxHead();if($cfg_feedback_forbid=='Y') exit('系统已经禁止评论功能!');$aid = intval($aid);if(empty($aid)) exit('没指定评论文档的ID,不能进行操作!');include_once(DEDEINC.'/memberlogin.class.php');$cfg_ml = new MemberLogin();if(empty($dopost)) $dopost = '';$page = empty($page) || $page<1 ? 1 : intval($page);$pagesize = 10;/*----------------------获得指定页的评论内容function getlist(){ }----------------------*/if($dopost=='getlist'){ $res = GetList($page); $res['page'] = GetPageList($pagesize, $res['totalcount']); echo json_encode($res); exit();}/*----------------------发送评论function send(){ }----------------------*/else if($dopost=='send'){ require_once(DEDEINC.'/charset.func.php'); //检查验证码 if($cfg_feedback_ck=='Y') { $svali = strtolower(trim(GetCkVdValue())); if(strtolower($validate) != $svali || $svali=='') { ResetVdValue(); ShowMsg('验证码错误,请点击验证码图片更新验证码!','-1'); exit(); } } $arcRow = GetOneArchive($aid); if(empty($arcRow['aid'])) { ShowMsg('无法查看未知文档的评论!','-1'); exit(); } if(isset($arcRow['notpost']) && $arcRow['notpost']==1) { ShowMsg('这篇文档禁止评论!','-1'); exit(); } if( $cfg_soft_lang != 'utf8' ) { $msg = UnicodeUrl2Gbk($msg); if(!empty($username)) $username = UnicodeUrl2Gbk($username); } //词汇过滤检查 if( $cfg_notallowstr != '' ) { if(preg_match("#".$cfg_notallowstr."#i", $msg)) { ShowMsg("评论内容含有禁用词汇!",'-1'); exit(); } } if( $cfg_replacestr != '' ) { $msg = preg_replace("#".$cfg_replacestr."#i", '***', $msg); } if( empty($msg) ) { ShowMsg ("评论内容可能不合法或为空!",'-1'); exit(); }if($cfg_feedback_guest == 'N' && $cfg_ml->M_ID < 1){ ShowMsg("管理员禁用了游客评论!<a href='{$cfg_cmspath}/member/login.php'>点击登录</a></font>",'-1');exit();} //检查用户 $username = empty($username) ? '游客' : $username; if(empty($notuser)) $notuser = 0; if($notuser==1) { $username = $cfg_ml->M_ID > 0 ? '匿名' : '游客'; } else if($cfg_ml->M_ID > 0) { $username = $cfg_ml->M_UserName; } else if($username!='' && $pwd!='') { $rs = $cfg_ml->CheckUser($username, $pwd); if($rs==1) { $dsql->ExecuteNoneQuery("Update `#@__member` set logintime='".time()."',loginip='".GetIP()."' where mid='{$cfg_ml->M_ID}'; "); } $cfg_ml = new MemberLogin(); } //检查评论间隔时间 $ip = GetIP(); $dtime = time(); if(!empty($cfg_feedback_time)) { //检查最后发表评论时间,如果未登陆判断当前IP最后评论时间 $where = ($cfg_ml->M_ID > 0 ? "WHERE `mid` = '$cfg_ml->M_ID' " : "WHERE `ip` = '$ip' "); $row = $dsql->GetOne("SELECT dtime FROM `#@__feedback` $where ORDER BY `id` DESC "); if(is_array($row) && $dtime - $row['dtime'] < $cfg_feedback_time) { ResetVdValue(); ShowMsg("管理员设置了评论间隔时间,请稍等休息一下!",'-1'); exit(); } } $face = 1; extract($arcRow, EXTR_SKIP); $msg = cn_substrR(TrimMsg($msg), 500); $username = cn_substrR(HtmlReplace($username,2), 20); if(empty($feedbacktype) || ($feedbacktype!='good' && $feedbacktype!='bad')) { $feedbacktype = 'feedback'; } //保存评论内容 if(!empty($fid)) { $row = $dsql->GetOne("SELECT username,msg from `#@__feedback` WHERE id ='$fid' "); $qmsg = '{quote}{content}'.$row['msg'].'{/content}{title}'.$row['username'].' 的原帖:{/title}{/quote}'; $msg = addslashes($qmsg).$msg; } $ischeck = ($cfg_feedbackcheck=='Y' ? 0 : 1); $arctitle = addslashes(RemoveXSS($title)); $typeid = intval($typeid); $feedbacktype = preg_replace("#[^0-9a-z]#i", "", $feedbacktype); $inquery = "INSERT INTO `#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`ischeck`,`dtime`, `mid`,`bad`,`good`,`ftype`,`face`,`msg`) VALUES ('$aid','$typeid','$username','$arctitle','$ip','$ischeck','$dtime', '{$cfg_ml->M_ID}','0','0','$feedbacktype','$face','$msg'); "; $rs = $dsql->ExecuteNoneQuery($inquery); if( !$rs ) { ShowMsg("发表评论出错了!",'-1'); //echo $dslq->GetError(); exit(); } $newid = $dsql->GetLastID(); /*给文章评分 if($feedbacktype=='bad') { $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores-{cfg_feedback_sub},badpost=badpost+1,lastpost='$dtime' WHERE id='$aid' "); } else if($feedbacktype=='good') { $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores+{$cfg_feedback_add},goodpost=goodpost+1,lastpost='$dtime' WHERE id='$aid' "); } else { $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET scores=scores+1,lastpost='$dtime' WHERE id='$aid' "); }*/ //给用户增加积分 if($cfg_ml->M_ID > 0) { #api{{ if(defined('UC_API') && @include_once DEDEROOT.'/api/uc.func.php') { //同步积分 uc_credit_note($cfg_ml->M_LoginID, $cfg_sendfb_scores); //推送事件 $arcRow = GetOneArchive($aid); $feed['icon'] = 'thread'; $feed['title_template'] = '<b>{username} 在网站发表了评论</b>'; $feed['title_data'] = array('username' => $cfg_ml->M_UserName); $feed['body_template'] = '<b>{subject}</b><br>{message}'; $url = !strstr($arcRow['arcurl'],'http://') ? ($cfg_basehost.$arcRow['arcurl']) : $arcRow['arcurl']; $feed['body_data'] = array('subject' => "<a href=\"".$url."\">$arcRow[arctitle]</a>", 'message' => cn_substr(strip_tags(preg_replace("/\[.+?\]/is", '', $msg)), 150)); $feed['images'][] = array('url' => $cfg_basehost.'/images/scores.gif', 'link'=> $cfg_basehost); uc_feed_note($cfg_ml->M_LoginID,$feed); unset($arcRow); } #/aip}} $dsql->ExecuteNoneQuery("UPDATE `#@__member` set scores=scores+{$cfg_sendfb_scores} WHERE mid='{$cfg_ml->M_ID}' "); $row = $dsql->GetOne("SELECT COUNT(*) AS nums FROM `#@__feedback` WHERE `mid`='".$cfg_ml->M_ID."'"); $dsql->ExecuteNoneQuery("UPDATE `#@__member_tj` SET `feedback`='$row[nums]' WHERE `mid`='".$cfg_ml->M_ID."'"); } $_SESSION['sedtime'] = time(); if($ischeck==0) { ShowMsg("成功发表评论,但需审核后才会显示你的评论!",'-1'); exit(); } else { $spaceurl = '#'; if($cfg_ml->M_ID > 0) $spaceurl = "{$cfg_memberurl}/index.php?uid=".urlencode($cfg_ml->M_LoginID); $id = $newid; $msg = stripslashes($msg); $msg = str_replace('<', '<', $msg); $msg = str_replace('>', '>', $msg);helper('smiley'); $msg = RemoveXSS(Quote_replace(parseSmileys($msg, $cfg_cmspath.'/images/smiley'))); //$msg = RemoveXSS(Quote_replace($msg)); if($feedbacktype=='bad') $bgimg = 'cmt-bad.gif'; else if($feedbacktype=='good') $bgimg = 'cmt-good.gif'; else $bgimg = 'cmt-neu.gif'; global $dsql, $aid, $pagesize, $cfg_templeturl; if($cfg_ml->M_ID==""){ $mface=$cfg_cmspath."/member/templets/images/dfboy.png"; } else { $row = $dsql->GetOne("SELECT face,sex FROM `#@__member` WHERE mid={$cfg_ml->M_ID} "); if(empty($row['face'])) { if($row['sex']=="女") $mface=$cfg_cmspath."/member/templets/images/dfgirl.png"; else $mface=$cfg_cmspath."/member/templets/images/dfboy.png"; } } } exit();}/** * 读取列表内容 * * @param int $page 页码 * @return string */function GetList($page=1){ global $dsql, $aid, $pagesize, $cfg_templeturl,$cfg_cmspath; $querystring = "SELECT fb.*,mb.userid,mb.face as mface,mb.spacesta,mb.scores,mb.sex FROM `#@__feedback` fb LEFT JOIN `#@__member` mb on mb.mid = fb.mid WHERE fb.aid='$aid' AND fb.ischeck='1' ORDER BY fb.id DESC"; $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__feedback` WHERE aid='$aid' AND ischeck='1' "); $totalcount = (empty($row['dd']) ? 0 : $row['dd']); $startNum = $pagesize * ($page-1); if($startNum > $totalcount) { echo "参数错误!"; return $totalcount; } $str = ''; $dsql->Execute('fb', $querystring." LIMIT $startNum, $pagesize "); while($fields = $dsql->GetArray('fb')){ $str .= '<li> <div class="clearfix"> <span class="section_reply_photo"><img src="'.$fields['mface'].'" /></span> <p class="f_col_DarkGray"><strong>'.$fields['username'].'</strong><span>'.date('Y-m-d H:i',$fields['dtime']).'</span></p> <p class=" song "><span class="reply_time">'.$fields['msg'].'</span> </p> </div> </li>'; } $res['totalcount'] = $totalcount; $res['msg'] = $str; return $res; }/** * 获取分页列表 * * @param int $pagesize 显示条数 * @param int $totalcount 总数 * @return string */function GetPageList($pagesize, $totalcount,$showNum='5'){ global $page; $curpage = empty($page) ? 1 : intval($page); $allpage = ceil($totalcount / $pagesize); $pagestr = ''; if($totalcount <= 0) { return ''; } $pagestr .= '<ul>'; //根据当前页计算前后页数 $leftPage_num = ceil( $showNum / 2 ); $rightPage_num = $showNum - $leftPage_num; //左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3 $left = $page - $leftPage_num; $left = $left <= 0 ? 1 : $left; //左边最小不能小于1 $right = $left + $showNum - 1; //左边加显示页数减1就是右边显示数 $right = $right <= $allpage ? $right : $allpage; //右边最大不能大于总页数 $left = $right - $showNum + 1 <= 0 ? 1 : $left; //确定右边再计算左边,必须二次计算 if ($page > 1) { $pagestr .= "<a href='#' onclick='LoadCommets(".($curpage-1).");'>上一页</a>"; }else{ $pagestr .= "<a href='#' onclick='LoadCommets(".$curpage.");'>上一页</a>"; } for ($i = $left; $i <= $right; $i++) { if($page == $i){ $pagestr .= "<li><a href='#' class='now_page' onclick='LoadCommets(".$i.");'>".$i."</a></li>"; }else{ $pagestr .= "<li><a href='#' onclick='LoadCommets(".$i.");'>".$i."</a></li>"; } } if ($page == $allPage) { $pagestr .= "<a href='#' onclick='LoadCommets(".$allPage.");'>下一页</a>"; }else{ $pagestr .= "<a href='#' onclick='LoadCommets(".($curpage+1).");'>上一页</a>"; } $pagestr .= '</ul>'; return $pagestr;}html:
<script type="text/javascript">$(function () {$pageno = "1";LoadCommets($pageno);});//获取评论列表内容function LoadCommets(pageno) {aid = "{dede:field.id/}";$.post('/plus/feedback_ajax.php',{dopost:'getlist',aid:aid,page:pageno},function (res) {res = JSON.parse(res); $('.clink_pager').html(res.page);$('.section_reply').html(res.msg);});}function changeAuthCode() { var num = new Date().getTime(); var rand = Math.round(Math.random() * 10000); num = num + rand; $('#ver_code').css('visibility','visible'); if ($("#vdimgck")[0]) { $("#vdimgck")[0].src = "../include/vdimgck.php?tag=" + num; } return false; }//提交前检验function vaildSend() {if($('textarea').val().length > 200){alert("你的评论是不是太长了?请填写200字以内的评论。");return false;}if($('textarea').val() == ''){alert("评论内容不能为空!");return false;}if($("input[name='validate']").val() == ''){alert("请填写验证码!");return false;}}</script><div class="comm"> <!-- 发表评论 /s --> <div class="comm_pub clearfix"> <form action="/plus/feedback_ajax.php" method="post" onsubmit="return vaildSend()"> <input type="hidden" name="dopost" value="send" /> <input type="hidden" name="comtype" value="comments" /> <input type="hidden" name="aid" value="{dede:field.id/}"> <input type="hidden" name="fid" id="feedbackfid" value="0" /> <h4>评论(500):</h4> <textarea name="msg" rows="4"></textarea> <p class="fr"> <img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" id="validateimg" onclick="this.src=this.src+'?'" style="cursor: pointer;" alt="看不清?点击更换"/> 验证码: <input type="text" name="validate" size="4" style="text-transform:uppercase;border:solid 2px #ddd;border-radius: 3px;width: 60px;" /> <button >发表评论</button> </p> </form> </div> <!-- 发表评论 /e --> <div class="comm_list clearfix "> <ul class="section_reply"> <!-- 评论内容 --> </ul> <div class="clink_pager" data-allpage="1"> <!-- 分页 --> </div> </div> </div> </div>
阅读全文
0 0
- dede二次开发织梦
- dede 二次开发
- dede织梦二次开发 通过子栏目id获取顶级栏目名称
- Dede二次开发程序详解
- Dede二次开发程序详解(dede爱好者必备)
- dede数据库类二次开发使用方法
- dede数据库类二次开发使用方法
- 【dedecms】dede二次开发数据表参考
- 织梦dede数据库类,二次开发
- dede数据库类二次开发使用方法
- DEDE模块MVC框架二次开发
- dede数据库类二次开发使用方法
- 织梦dede数据库类,二次开发
- DEDE模块MVC框架二次开发
- DEDE织梦标签dede:arclist 详解
- DEDE织梦标签dede:arclist 详解
- DEDE织梦教程
- DEDE织梦教程
- 文本情感分类
- java之递归算法
- 线性循环链表
- Tomcat处理乱码问题终极版
- Leetcode——26. Remove Duplicates from Sorted Array
- dede二次开发织梦
- 随时更新的日记
- Ubuntu 安装与测试 Caffe & 遇到的问题及解决方案
- Java问题记录
- 配置eclipse使能打开当前文件所在目录
- 安装CUDA 出现libEGL.so.1 is not a symbolic link libcudnn.so.5 is not a symbolic link
- 网络中隐含层神经元节点的个数(需要学习的特征数目)
- 正则表达式15-25位数字包括一个减号,减号不能开头
- Configuring Spring Oauth2 with JWT & asymmetric RSA keypair