首页 文章 精选 留言 我的

精选列表

搜索[人设自定义],共10006篇文章
优秀的个人博客,低调大师

自定义jwt实现spring cloud nosession

JWT实现在网关模块,网关的路由是默认配置。 jwt 生成、验证依赖 io.jsonwebtokenjjwt0.7.0 最核心的配置是在spring security中加入我们token校验机制的fiter:JwtAuthenticationTokenFilter protectedvoiddoFilterInternal( HttpServletRequestrequest, HttpServletResponseresponse, FilterChainchain)throwsServletException,IOException{ StringauthHeader=request.getHeader(this.tokenHeader); if(authHeader!=null&&authHeader.startsWith(tokenHead)){ StringauthToken=authHeader.substring(tokenHead.length());//Thepartafter"Bearer" Stringusername=jwtTokenUtil.getUsernameFromToken(authToken); logger.info("checkingauthentication"+username); if(username!=null&&SecurityContextHolder.getContext().getAuthentication()==null){ UserDetailsuserDetails=this.userDetailsService.loadUserByUsername(username); if(jwtTokenUtil.validateToken(authToken,userDetails)){ UsernamePasswordAuthenticationTokenauthentication=newUsernamePasswordAuthenticationToken( userDetails,null,userDetails.getAuthorities()); authentication.setDetails(newWebAuthenticationDetailsSource().buildDetails( request)); logger.info("authenticateduser"+username+",settingsecuritycontext"); SecurityContextHolder.getContext().setAuthentication(authentication); } } } chain.doFilter(request,response); } 在看我们的spring security 配置 protectedvoidconfigure(HttpSecurityhttpSecurity)throwsException{ httpSecurity //由于使用的是JWT,我们这里不需要csrf .csrf().disable() .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() //基于token,所以不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests() //.antMatchers(HttpMethod.OPTIONS,"/**").permitAll() //允许对于网站静态资源的无授权访问 .antMatchers( HttpMethod.GET, "/", "/*.html", "/favicon.ico", "/**/*.html", "/**/*.css", "/**/*.js" ).permitAll() .antMatchers("/auth/**").permitAll() .anyRequest().authenticated(); //添加JWTfilter httpSecurity .addFilterBefore(authenticationTokenFilterBean(),UsernamePasswordAuthenticationFilter.class); //禁用缓存 httpSecurity.headers().cacheControl(); } 获取token POST http://localhost:8080/auth Content-Type:application/json {"username":"1234","password":"1234"} --- 结果 { "token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMjM0IiwiY3JlYXRlZCI6MTUwMzQxMzMwODkxOCwiZXhwIjoxNTA0MDE4MTA4fQ.jQc5MRdgKfi5ds1N0ZSsxkunQQVkFuGJ7Giv1_JrjTiKsu3h7UwE8vjU5wVPaipM_zkbHaMpRqXvF__ci5p7aw" } 访问资源 GET http://localhost:8080/user-service/bizUser/getUserScore Content-Type:application/json Authorization:BearereyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxMjM0IiwiY3JlYXRlZCI6MTUwMzQxMzMwODkxOCwiZXhwIjoxNTA0MDE4MTA4fQ.jQc5MRdgKfi5ds1N0ZSsxkunQQVkFuGJ7Giv1_JrjTiKsu3h7UwE8vjU5wVPaipM_zkbHaMpRqXvF__ci5p7aw --- 结果 [ { "id":11, "username":"123", "password":"456", "scoreList":[ { "id":1, "score":100 } ] } ] 不加认证token { "timestamp":1503413947608, "status":401, "error":"Unauthorized", "message":"手动滑稽( ´-ω・)▄︻┻┳══━一", "path":"/user-service/bizUser/getUserScore" } 参考https://github.com/wpcfan/spring-boot-tut 详细整合源码:springcloud-zuul-jwt 和 springboot-mybatis-plus

优秀的个人博客,低调大师

UISlider自定义滑动条高度(swift)

UISlider滑动条的高度系统默认给我们设定了,没有办法进行改变。可是,我们的设计又是需要改变这个高度的,怎么办呢?这个时候,我们可以写一个UISlider的子类,重写四个方法就能实现了。 // // CustomSlider.swift // CustomSlider // // Created by iOS on 2018/4/4. // Copyright © 2018年 weiman. All rights reserved. // import UIKit class CustomSlider: UISlider { var height: CGFloat = 0.0 override func minimumValueImageRect(forBounds bounds: CGRect) -> CGRect { return self.bounds } override func maximumValueImageRect(forBounds bounds: CGRect) -> CGRect { return self.bounds } // 控制slider的宽和高,这个方法才是真正的改变slider滑道的高的 override func trackRect(forBounds bounds: CGRect) -> CGRect { let rect = super.trackRect(forBounds: bounds) return CGRect.init(x: rect.origin.x, y: (bounds.size.height-height)/2, width: bounds.size.width, height: height) } // 改变滑块的触摸范围 override func thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect { return super.thumbRect(forBounds: bounds, trackRect: rect, value: value) } } 使用: lazy var slider: CustomSlider = { $0.setThumbImage(#imageLiteral(resourceName: "sliderThumbImage"), for: .normal) $0.height = 5 //设置高度 $0.maximumTrackTintColor = .clear $0.minimumTrackTintColor = UIColor(red: 174/255.0, green: 119/255.0, blue: 255/255.0, alpha: 1.0) $0.addTarget(self, action: #selector(sliderTouchDown(slider:)), for: .touchDown) $0.addTarget(self, action: #selector(sliderEnd(slider:)), for: .touchUpInside) return $0 }( CustomSlider() ) 效果: image.png

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册