看隐藏部位照片
å‰�言å�šä¸»ä»‹ç»�✌CSDN特邀作者ã€�å…¨æ ˆé¢†åŸŸä¼˜è´¨åˆ›ä½œè€…ã€�10å¹´ITä»�业ç»�验ã€�ç �云/æ�˜é‡‘/知ä¹�/Bç«™/å��为云/阿里云ç‰å¹³å�°ä¼˜è´¨ä½œè€…ã€�专注äº�Javaã€�å°�程åº�/APPã€�pythonã€�大数æ�®ç‰æŠ€æœ¯é¢†åŸŸå’Œæ¯•业项目å®�战以å�Šç¨‹åº�定制化开å�‘ã€�文档编写ã€�ç”疑辅导ç‰ã€‚✌精彩专æ � æ�¨è��订阅最值得选的微信å°�程åº�毕业设计选题大全200个çƒé—¨é€‰é¢˜æ�¨è��✅最值得选的计算机毕业设计选题大全500个çƒé—¨é€‰é¢˜æ�¨è��✅Javaç²¾å“�项目å®�战案例《500套》Java项目å®�战案例《500套》微信å°�程åº�项目精å“�案例《500套》文末è�·å�–æº�ç �æ•°æ�®åº“文档感兴趣的å�¯ä»¥å…ˆæ”¶è—�èµ·æ�¥è¿˜æœ‰å¤§å®¶åœ¨æ¯•设选题项目以å�Šè®ºæ–‡ç¼–写ç‰ç›¸å…³é—®é¢˜éƒ½å�¯ä»¥ç»™æˆ‘留言咨询希望帮助更多的人技术ç�¯å¢ƒjdk版本
8 �以上ide工具Eclipse或者 IDEA�微信开�者工具数�库: mysql
7编程è¯è¨€: Javaã€�微信å°�程åº�java框æ�¶SpringBootmaven:
3.
1详细技术HTMLCSSJAVASpringBootMYSQLVUEMAVEN微信å°�程åº�微信开å�‘者工具系统部分效æ�œå±•示å°�程åº�端功能模å�—å��å�°ç®¡ç�†ç«¯åŠŸèƒ½æ¨¡å�—详细视频演示â�¤æ–‡æœ«å�¡ç‰‡è�”系我è�·å�–更详细的演示视频系统æ�¶æ�„设计系统æ�¶æ�„设计是软件开å�‘过程ä¸è‡³å…³é‡�è¦�的一ç�¯ã€‚首先是模å�‹å±‚Model模å�‹å±‚通常对应ç�€æ•°æ�®åº“或者其他数æ�®æº�它负责ä¸�æ•°æ�®åº“进行交互执行å�„ç§�æ•°æ�®æ“�作并将处ç�†å��的数æ�®ä¼ 递给æ�§åˆ¶å™¨å±‚。模å�‹å±‚的设计应该简æ´�清晰尽å�¯èƒ½å‡�å°‘ä¸�视图和æ�§åˆ¶å™¨çš„耦å�ˆä»¥æ��高代ç �çš„å�¯ç»´æŠ¤æ€§å’Œå�¯é‡�用性。其次是视图层View通常是通过网页ã€�移动应用界é�¢æˆ–者其他用户界é�¢æ�¥å±•示数æ�®ã€‚视图层ä¸�用户交互æ�¥å�—ç”¨æˆ·çš„è¾“å…¥å¹¶å°†è¾“å…¥ä¼ é€’ç»™æ�§åˆ¶å™¨å±‚进行处ç�†ã€‚在MVC三层æ�¶æ�„ä¸è§†å›¾å±‚应该尽é‡�ä¿�æŒ�简å�•å�ªè´Ÿè´£æ•°æ�®çš„展示和用户交互ä¸�涉å�Šä¸šåŠ¡é€»è¾‘çš„å¤„ç�†ä»¥ä¿�æŒ�视图层的清晰度和å�¯å¤�用性最å��是æ�§åˆ¶å™¨å±‚Controlleræ¯�个层都有特定的è�Œè´£å’ŒåŠŸèƒ½é€šè¿‡åˆ†å±‚æ�¶æ�„设计å®�ç�°ä»£ç �模å�—化为软件开å�‘æ��供了一ç§�有效的æ�¶æ�„模å¼�。系统æ�¶æ�„如图所示。æ�¨è��项目基äº�微信å°�程åº�çš„è¿�动å�¥åº·ç®¡ç�†ç³»ç»Ÿè®¾è®¡ä¸�å®�ç�°åŸºäº�微信å°�程åº�的社区养è€�一站å¼�æœ�务系统设计ä¸�å®�ç�°åŸºäº�SpringBootVue的社区医疗综å�ˆæœ�务平å�°è®¾è®¡ä¸�å®�ç�°åŸºäº�Python爬虫å��å�Œè¿‡æ»¤ç®—法的çŸè§†é¢‘æ�¨è��å�¯è§†åŒ–分æ��系统的设计ä¸�å®�ç�°åŸºäº�大数æ�®çˆ¬è™«çš„影视评论采集å�¯è§†åŒ–分æ��系统的设计ä¸�å®�ç�°åŸºäº�微信å°�程åº�çš„ä¸å��诗è¯�交æµ�å¹³å�°è®¾è®¡ä¸�å®�ç�°åŸºäº�SpringBootVue农作物病虫害防治系统设计ä¸�å®�ç�°åŸºäº�SpringBootVueçš„æ ¡å›å®‰å…¨ä¿¡æ�¯ä¸Šä¼ ä¸�应急å“�应系统的设计ä¸�å®�ç�°åŸºäº�SpringBootVueç�¾å®³åº”急救æ�´å¹³å�°è®¾è®¡ä¸�å®�ç�°åŸºäº�SpringBootVueçš„æ ¡å›æ—§ç‰©æ��èµ å¹³å�°è®¾è®¡ä¸�å®�ç�°å…¶ä»–案例å�‚考为什么选择我们海é‡�å®�战案例所有å®�战项目æº�ç �å�‡ä¸ºå�šä¸»æ”¶é›†å’Œå¼€å�‘亲测å�¯ç”¨è´¨é‡�ä¿�障大家å�¯ä»¥æ”¾å¿ƒä½¿ç”¨å½“然也å�¯æ ¹æ�®éœ€æ±‚定制开å�‘。自己的公众å�·ä¸€ç‚¹æ¯•设代ç �å�‚考// 忽略æ�ƒé™�验è¯�的注解IgnoreAuthPostMapping(value/login)publicRlogin(Stringusername,Stringpassword,Stringcaptcha,HttpServletRequestrequest){// 查询用户信æ�¯UsersEntityuseruserService.selectOne(newEntityWrapperUsersEntity().eq(username,username));// 判æ–用户是å�¦å˜åœ¨æˆ–密ç �是å�¦æ£ç¡®if(usernull||!user.getPassword().equals(password)){returnR.error(è´¦å�·æˆ–密ç �ä¸�æ£ç¡®);}// 生æˆ�tokenStringtokentokenService.generateToken(user.getId(),username,users,user.getRole());returnR.ok().put(token,token);}// 生æˆ�tokenOverridepublicStringgenerateToken(Longuserid,Stringusername,StringtableName,Stringrole){// 查询是å�¦å˜åœ¨å·²æœ‰tokenTokenEntitytokenEntitythis.selectOne(newEntityWrapperTokenEntity().eq(userid,userid).eq(role,role));// 生æˆ�éš�机tokenå—符串StringtokenCommonUtil.getRandomString(
;// 设置token过期时间为1�时�CalendarcalCalendar.getInstance();cal.setTime(newDate());cal.add(Calendar.HOUR_OF_DAY,
;if(tokenEntity!null){// æ›´æ–°tokenä¿¡æ�¯tokenEntity.setToken(token);tokenEntity.setExpiratedtime(cal.getTime());this.updateById(tokenEntity);}else{// 新建token记录this.insert(newTokenEntity(userid,username,tableName,role,token,cal.getTime()));}returntoken;}/** * æ�ƒé™�(Token)验è¯�拦截器 */ComponentpublicclassAuthorizationInterceptorimplementsHandlerInterceptor{// 定义Token在请求Headerä¸çš„é”®å��publicstaticfinalStringLOGIN_TOKEN_KEYToken;AutowiredprivateTokenServicetokenService;OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{// 支æŒ�跨域请求response.setHeader(Access-Control-Allow-Methods,POST, GET, OPTIONS, DELETE);response.setHeader(Access-Control-Max-Age,
;response.setHeader(Access-Control-Allow-Credentials,true);response.setHeader(Access-Control-Allow-Headers,x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization);response.setHeader(Access-Control-Allow-Origin,request.getHeader(Origin));// 跨域时会首先å�‘é€�一个OPTIONS请求这里我们给OPTIONS请求直æ�¥è¿”å›�æ£å¸¸çжæ€�if(request.getMethod().equals(RequestMethod.OPTIONS.name())){response.setStatus(HttpStatus.OK.value());returnfalse;}// è�·å�–HandlerMethod注解IgnoreAuthannotation;if(handlerinstanceofHandlerMethod){annotation((HandlerMethod)handler).getMethodAnnotation(IgnoreAuth.class);}else{returntrue;}// ä»�headerä¸è�·å�–tokenStringtokenrequest.getHeader(LOGIN_TOKEN_KEY);/** * ä¸�需è¦�验è¯�æ�ƒé™�的方法直æ�¥æ”¾è¿‡ */if(annotation!null){returntrue;}// æ ¹æ�®tokenè�·å�–tokenå®�体TokenEntitytokenEntitynull;if(StringUtils.isNotBlank(token)){tokenEntitytokenService.getTokenEntity(token);}if(tokenEntity!null){// 将用户信æ�¯å˜å…¥sessionrequest.getSession().setAttribute(userId,tokenEntity.getUserid());request.getSession().setAttribute(role,tokenEntity.getRole());request.getSession().setAttribute(tableName,tokenEntity.getTablename());request.getSession().setAttribute(username,tokenEntity.getUsername());returntrue;}// 验è¯�失败返å›�401错误和æ��示信æ�¯PrintWriterwriternull;response.setCharacterEncoding(UTF-
;response.setContentType(application/json; charsetutf-
;try{writerresponse.getWriter();writer.print(JSONObject.toJSONString(R.error(401,请先登录)));}finally{if(writer!null){writer.close();}}returnfalse;}}这段Java代ç �主è¦�是一个登录功能的å®�ç�°æ¶‰å�Šåˆ°ç”Ÿæˆ�Tokenå’Œæ�ƒé™�验è¯�的拦截器。IgnoreAuth 注解这是一个自定义的注解用äº�æ ‡è¯†ä¸�需è¦�进行æ�ƒé™�验è¯�的方法。PostMapping(value “/loginâ€�)这是一个使用POST请求方å¼�的登录æ�¥å�£ã€‚login 方法该方法æ�¥æ”¶ç”¨æˆ·å��ã€�密ç �和验è¯�ç �作为å�‚æ•°å¹¶è¿”å›�一个包å�«ç”Ÿæˆ�çš„Tokençš„å“�应对象。首先通过用户å��查询用户信æ�¯ç„¶å��判æ–用户是å�¦å˜åœ¨å¹¶éªŒè¯�密ç �是å�¦æ£ç¡®ã€‚如æ�œéªŒè¯�失败则返å›�错误æ��示如æ�œéªŒè¯�æˆ�功则调用 generateToken 方法生æˆ�Tokenå¹¶å°†å…¶æ·»åŠ åˆ°å“�应对象ä¸è¿”å›�。generateToken 方法该方法用äº�生æˆ�Token。首先查询是å�¦å˜åœ¨å·²æœ‰çš„Tokenå®�体然å��生æˆ�一个éš�机的Tokenå—符串。æ�¥ä¸‹æ�¥è®¾ç½®Token的过期时间为当å‰�æ—¶é—´åŠ ä¸Š1å°�æ—¶å¹¶æ ¹æ�®æƒ…况进行更新或æ�’å…¥Token记录。最å��è¿”å›�生æˆ�çš„Tokenå—符串。AuthorizationInterceptor 类这是一个æ�ƒé™�验è¯�拦截器å®�ç�°ç±»ã€‚它å®�ç�°äº† HandlerInterceptor æ�¥å�£ç”¨äº�在请求处ç�†ä¹‹å‰�进行æ�ƒé™�验è¯�。在 preHandle 方法ä¸é¦–先设置支æŒ�跨域请求的相关头信æ�¯å¹¶å¤„ç�†è·¨åŸŸæ—¶çš„ OPTIONS 请求。然å��通过å��å°„è�·å�–请求处ç�†æ–¹æ³•上的 IgnoreAuth 注解如æ�œå˜åœ¨è¯¥æ³¨è§£åˆ™ç›´æ�¥æ”¾è¿‡ã€‚æ�¥ç�€ä»�请求头ä¸è�·å�– Tokenå¹¶æ ¹æ�® Token è�·å�–对应的 Token å®�体。如æ�œ Token å®�体å˜åœ¨åˆ™å°†ç”¨æˆ·ä¿¡æ�¯å˜å…¥ session并放行请求。如æ�œéªŒè¯�失败则返å›�401错误和相应的æ��示信æ�¯ã€‚总结这段代ç �å®�ç�°äº†ä¸€ä¸ªåŸºæœ¬çš„ç™»å½•åŠŸèƒ½å¹¶åŠ å…¥äº†å¯¹æ�ƒé™�的验è¯�拦截确ä¿�å�ªæœ‰æ‹¥æœ‰æœ‰æ•ˆ Token 的用户æ‰�能访问å�—é™�资æº�。æº�ç �å�Šæ–‡æ¡£è�·å�–需è¦�æˆ�å“�或者定å�šå¼€å�‘æ–‡ç« ä¸‹æ–¹å��片è�”系我å�³å�¯~大家点èµ�ã€�æ”¶è—�ã€�关注ã€�评论啦 ã€�查看è�·å�–è�”系方å¼�精彩专æ �æ�¨è��订阅在下方专æ �Javaç²¾å“�å®�战案例《200套》微信å°�程åº�项目精å“�å®�战案例《200套》Python项目精å“�å®�战案例《200套》大数æ�®é¡¹ç›®ç²¾å“�å®�战案例《200套》
9·1芒果视频-9·1芒果视频应用