首页 文章 精选 留言 我的

精选列表

搜索[前后端分离],共10008篇文章
优秀的个人博客,低调大师

MaxKey 单点登录认证系统前后端分离 v3.5.2GA 发布

English|中文 概述 MaxKey单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是业界领先的IAM身份管理和认证产品,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供安全、标准和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 官方网站官网|官网二线 邮箱email:support@maxsso.net 代码托管Gitee|GitHub 单点登录(Single Sign On)简称为SSO,用户只需要登录认证中心一次就可以访问所有相互信任的应用系统,无需再次登录。 主要功能: 所有应用系统共享一个身份认证系统 所有应用系统能够识别和提取ticket信息 产品特性 标准协议 序号 协议 支持 1.1 OAuth 2.0/OpenID Connect 高 1.2 SAML 2.0 高 1.3 JWT 高 1.4 CAS 高 1.5 FormBased 中 1.6 TokenBased(Post/Cookie) 中 1.7 ExtendApi 低 1.8 EXT 低 登录支持 序号 登录方式 2.1 动态验证码 字母/数字/算术 2.2 双因素认证 2.3 短信认证 腾讯云短信/阿里云短信/网易云信 2.4 登录易/Google/Microsoft Authenticator/FreeOTP/支持TOTP或者HOTP 2.5 Kerberos/SPNEGO/AD域 2.6 OpenLDAP/ActiveDirectory/标准LDAP服务器 2.7 社交账号 微信/QQ/微博/钉钉/Google/Facebook/其他 2.8 扫码登录 企业微信/钉钉/飞书扫码登录 提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。 提供用户生命周期管理,支持SCIM 2协议;开箱即用的连接器(Connector)实现身份供给同步。 简化微软Active Directory域控、标准LDAP服务器机构和账号管理,密码自助服务重置密码。 认证多租户功能,支持集团下多企业独立管理或企业下不同部门数据隔离的,降低运维成本。 认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。 基于Java EE平台,微服务架构,采用Spring、MySQL、Tomcat、Redis、MQ等开源技术,扩展性强。 开源、安全、自主可控,许可证 Apache 2.0 License &MaxKey版权声明。 界面 MaxKey认证 登录界面 主界面 下载 当前版本百度网盘下载,历史版本 版本 日期 Docker 网盘 网盘提取码 v 3.5.2 GA 2022/07/14 链接 下载 mxk9 Roadmap 序号 计划 时间 1 Java 17+ 2022Q3 2 Jakarta EE 9+ 2022Q3 3 Spring Framework 6 2022Q4 4 Spring Boot 3 2022Q4 版本发行说明 MaxKey v 3.5.2 GA 2022/07/14 *(MAXKEY-220701) 网站界面图片更新 *(MAXKEY-220702) 注销问题修复 *(MAXKEY-220703) 单点注销功能增强 *(MAXKEY-220704) JWT单点登录参数丢失的修复 *(MAXKEY-220705) 跳转功能优化 *(MAXKEY-220706) 组织类型虚拟和实体组织 *(MAXKEY-220707) 应用管理 第三个页签下适配选项保存后无法显示 #I5DWS3 *(MAXKEY-220708) 删除系统的keystore,系统在NGINX中配置 *(MAXKEY-220709) 角色地址无法访问#I5E717 *(MAXKEY-220710) 角色新增的问题修复 *(MAXKEY-220711) token刷新问题修复 *(MAXKEY-220712) remove select apps protocol,机构管理 ->机构配置,groupName->roleName *(MAXKEY-220713) 新增用户无法输入手机号和工号 #68 *(MAXKEY-220714) 角色名称和应用名称字段修改 *(MAXKEY-220715) 登录错误提示信息 *(MAXKEY-220716) OAuth2自动提交认证 *(MAXKEY-220717) nacos bootstrap升级和优化 *(MAXKEY-220718) formbase用户初始化跳转问题修复 *(MAXKEY-220719) 返回前端message优化 *(MAXKEY-220720) 删除spring-data-redis依赖 *(MAXKEY-220721) 依赖项引用、更新和升级 springcloud 3.1.3 nacosclient 2.0.4 jedis 4.2.3 spring 5.3.21 springBoot 2.6.9 springSecurity 5.6.6

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

后端分离架构使用shiro框架进行登录的两种实现

方法一:重写FormAuthenticationFilter 原理: 假设在shiro.xml中配置了 /** = authc 而默认authc对应org.apache.shiro.web.filter.authc.FormAuthenticationFilter过滤器 则表示所有路径都被此过滤器拦截 当未登录请求被拦截,会调用FormAuthenticationFilter.onAccessDeny(): 如果请求的是loginUrl,则调用AuthenticatingFilter.executeLogin() 如果不是,则使request重定向到loginUrl,并return false; AuthenticatingFilter.executeLogin(): 调用subject.login(token) 如果登录成功,则调用onLoginSuccess() 失败则调用onLoginFailure() AuthenticatingFilter.onLoginSuccess(): return true; AuthenticatingFilter.onLoginFailure(): return false; subject.login(token): 最终会调用realm的doGetAuthenticationInfo 思路 重写默认的FormAuthenticationFilter, 在onAccessDeny()方法中: 如果请求的是loginUrl,则调用AuthenticatingFilter.executeLogin() 如果不是,则返回json,提示“未登录,无法访问该地址” @Override protectedbooleanonAccessDenied(ServletRequestrequest,ServletResponseresponse)throwsException{ if(this.isLoginRequest(request,response)){ if(this.isLoginSubmission(request,response)){ if(log.isTraceEnabled()){ log.trace("Loginsubmissiondetected.Attemptingtoexecutelogin."); } returnthis.executeLogin(request,response); }else{ if(log.isTraceEnabled()){ log.trace("Loginpageview."); } returntrue; } }else{ if(log.isTraceEnabled()){ log.trace("Attemptingtoaccessapathwhichrequiresauthentication.ForwardingtotheAuthenticationurl["+this.getLoginUrl()+"]"); } response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriterout=response.getWriter(); ServerResponseserverResponse=ServerResponse.createByErrorMessage("未登录,无法访问该地址"); Gsongson=GsonFactory.getGson(); Strings=gson.toJson(serverResponse); out.println(s); out.flush(); out.close(); returnfalse; } } 由于AuthenticatingFilter.executeLogin()会调用onLoginSuccess()和onLoginFailure()方法 所以我们重写两个方法,前者返回登录成功的json,并把当前用户放入session;后者返回登录失败的json @Override protectedbooleanonLoginSuccess(AuthenticationTokentoken,Subjectsubject,ServletRequestrequest,ServletResponseresponse)throwsException{ response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriterout=null; try{ out=response.getWriter(); }catch(IOExceptione1){ e1.printStackTrace(); } HttpSessionsession=((HttpServletRequest)request).getSession(); Useruser=userMapper.selectByUserName(token.getPrincipal().toString()); session.setAttribute(Const.CURRENT_USER,user); ServerResponseserverResponse=ServerResponse.createBySuccessMsg("登录成功"); Gsongson=GsonFactory.getGson(); Strings=gson.toJson(serverResponse); out.println(s); out.flush(); out.close(); returntrue; } @Override protectedbooleanonLoginFailure(AuthenticationTokentoken,AuthenticationExceptione,ServletRequestrequest,ServletResponseresponse){ response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriterout=null; try{ out=response.getWriter(); }catch(IOExceptione1){ e1.printStackTrace(); } ServerResponseserverResponse=ServerResponse.createByErrorMessage("登录失败"); Gsongson=GsonFactory.getGson(); Strings=gson.toJson(serverResponse); out.println(s); out.flush(); out.close(); returnfalse; } } 最后配置shiro.xml将authc对应的默认的FormAuthenticationFilter,替换成我们的MyAuthenticationFilter <beanid="shiroFilter"class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <propertyname="securityManager"ref="securityManager"/> <propertyname="loginUrl"value="/user/login.do"/> <propertyname="unauthorizedUrl"value="/user/unauthorized_err"/> <propertyname="filters"> <map> <entrykey="authc"value-ref="myAuthenticationFilter"/> </map> </property> <propertyname="filterChainDefinitions"> <value> /user/login_err.do=anon /user/unauthorized_err.do=anon /**=authc </value> </property> </bean> <beanid="myAuthenticationFilter"class="com.mmall.shiro.filter.MyAuthenticationFilter"/> 方法二:使用PassThruAuthenticationFilter代替FormAuthenticationFilter 原理: org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter源码: publicclassPassThruAuthenticationFilterextendsAuthenticationFilter{ publicPassThruAuthenticationFilter(){ } protectedbooleanonAccessDenied(ServletRequestrequest,ServletResponseresponse)throwsException{ if(this.isLoginRequest(request,response)){ returntrue; }else{ this.saveRequestAndRedirectToLogin(request,response); returnfalse; } } } 官方文档: An authentication filter that redirects the user to the login page when they are trying to access a protected resource. However, if the user is trying to access the login page, the filter lets the request pass through to the application code. The difference between this filter and the FormAuthenticationFilter is that on a login submission (by default an HTTP POST to the login URL), the FormAuthenticationFilter filter attempts to automatically authenticate the user by passing the username and password request parameter values to Subject.login(usernamePasswordToken) directly. Conversely, this controller always passes all requests to the loginUrl through, both GETs and POSTs. This is useful in cases where the developer wants to write their own login behavior, which should include a call to Subject.login(AuthenticationToken) at some point. For example, if the developer has their own custom MVC login controller or validator, this PassThruAuthenticationFilter may be appropriate. 我们继承PassThruAuthenticationFilter并重写onAccessDenied方法,和redirectToLogin方法 publicclassMyPassThruAuthenticationFilterextendsPassThruAuthenticationFilter{ privateStringloginErrUrl="/"; publicvoidsetLoginErrUrl(StringloginErrUrl){ this.loginErrUrl=loginErrUrl; } @Override protectedbooleanonAccessDenied(ServletRequestrequest,ServletResponseresponse)throwsException{ if(this.isLoginRequest(request,response)){ returntrue; }else{ this.saveRequestAndRedirectToLogin(request,response); returnfalse; } } //重写redirectToLogin方法是因为saveRequestAndRedirectToLogin方法会调用它,而原始的redirectToLogin方法会使得请求重定向到loginUrl @Override protectedvoidredirectToLogin(ServletRequestrequest,ServletResponseresponse)throwsIOException{ WebUtils.issueRedirect(request,response,loginErrUrl); } } 首先修改shiro.xml , 将authc默认对应的FormAuthenticationFilter修改为MyPassThruAuthenticationFilter <beanid="shiroFilter"class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <propertyname="securityManager"ref="securityManager"/> <propertyname="loginUrl"value="/user/login.do"/> <propertyname="unauthorizedUrl"value="/user/unauthorized_err"/> <propertyname="filters"> <map> <entrykey="authc"> <beanclass="com.mmall.shiro.filter.MyPassThruAuthenticationFilter"> <propertyname="loginErrUrl"value="/user/login_err.do"/><!--注意这里的loginErrUrl与上面的loginUrl的区别--> </bean> </entry> </map> </property> <propertyname="filterChainDefinitions"> <value> /=anon /user/login_err.do=anon /user/unauthorized_err.do=anon /user/logout.do=logout /**=authc </value> </property> </bean> 然后修改loginUrl对应的Contoller的方法,在其中要调用subject.login()完成shiro的认证 //UserController中:结合shiro,使用PassThruAuthenticationFilter的登录,需要调用subject.login()完成shiro的认证 @RequestMapping(value="login.do",method=RequestMethod.POST) @ResponseBody publicServerResponselogin(@RequestBodyUseruser,HttpSessionsession){ Subjectsubject=SecurityUtils.getSubject(); UsernamePasswordTokentoken=newUsernamePasswordToken(user.getUsername(),user.getPassword()); //ServerResponseserverResponse=iUserService.login(user.getUsername(),user.getPassword()); try{ /**subject.login(token)提交申请,验证能不能通过,也就是交给shiro。这里会回调reaml(或自定义的realm)里的一个方法 protectedAuthenticationInfodoGetAuthenticationInfo()*/ subject.login(token); }catch(AuthenticationExceptione){//验证身份失败 returnServerResponse.createByErrorMessage("登陆客户身份失败!"); } /**Shiro验证后,跳转到此处,这里判断验证是否通过*/ if(subject.isAuthenticated()){//验证身份通过 session.setAttribute(Const.CURRENT_USER,subject.getPrincipal()); returnServerResponse.createBySuccessMsg("登录成功"); }else{ returnServerResponse.createByErrorMessage("登陆客户身份失败!"); } } 而loginErrUrl对应的方法则返回Json提示未登录: @RequestMapping(value="login_err.do",method=RequestMethod.GET) @ResponseBody publicServerResponselogin_error(){ returnServerResponse.createByErrorMessage("用户未登录"); }

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

ShopWind 商城系统 v4.3 更新,Yii3+Vue3 前后端分离

ShopWind 多商户商城系统v4.3 发布更新,PHP+MySQL,服务端 Yii2 框架,移动端 uniapp。使用 vue3/vite、Element Plus UI、 axios 数据请求、页面异步加载。 本次更新新增移动端发布商品增加商品类型、DIY 装修、新增商品采集插件等多项。 移动端预览: 平台后台预览 PC 端预览 商家管理预览 自定义页面装修预览 演示体验 后台体验:https://v4.shopwind‍.net/admin平台管理员账号:admin 密码:111111 前台体验:https://v4.shopwi‍n‍d.net自行微信登录、QQ、支付宝登录 商家体验:https://v4.shopwind.n‍et/seller/login商家测试账号:18978189171 密码:111111 移动端体验 H5 端体验:‍https://v4.shopwind.net/h5 Android(安卓版)体验:点击下载安装 iOS(苹果版)体验:https://apps.apple.com/cn/app/id1548625748 扫码体验其他端 新增部分功能如下: 1. 产品发布新增商品类型选择(实物商品、服务商品、虚拟商品)。实物商品:走常规的发货物流流程;服务商品:线下到店二维码核销,无需发货,下单无需收货地址;虚拟商品:无需收货地址,虚拟发货,如软件行业,充值卡券 2. 新增api 接口,服务商品订单核销接口。 3. 新增服务商品订单核销二维码,买家订单展示二维码,商家通过扫码核销。 4. WebIM 客服聊天增加点击回车发送消息,支持表情、图片上传,支持回话窗口展示订单。 5. 演示数据增加完整地区数据。数据库表 region(地区表)字段增加 letter(首字母) 6. 页面装修支持自定义新增新的页面,pc 端,移动端均支持自定义增加新页面,增加新页面 diy 可视化组件编辑页面,发布新的页面。 7. 优惠券新增领券页面,增加作废操作 ... ... ... 更新内容如下: 新增服务端管理后台 DIY 装修选择秒杀商品组件增加分类和关键词搜索条件 新增电脑端配送时效功能模块(可设置店铺承诺发货送到时效) 新增移动端商品详情页显示物流配送时效 新增电脑端店铺商品分类设置 新增电脑端发布商品时增加本店分类 新增 API 接口【获取商品详情接口】增加返回字段本店分类(scategory)数组 新增 API 接口【获取商品列表】增加入参店铺商品分类(scate_id)筛选条件 新增移动端店铺底部主导航模块(首页 - 商品 - 分类 - 客服) 新增移动端店铺商品分类页 优化数据采集插件,在采集商品时可以选择不同的插件(已安装配置好)来采集商品 优化采集插件【99api】通过链接自动识别采集的平台 优化移动端发布 / 编辑商品,品牌项增加 “请选择” 优化移动端商品详情页批发价格增加 1 件的价格显示 优化服务端管理后台 DIY 装修输入链接的操作(增加选择链接的快捷方式) 修复移动端商品列表中显示已关闭的店铺的商品数据 修复电脑端购买商品后支付成功返回页面空白的问题 修复移动端 DIY 组件【优惠券】页面效果错位的问题 修复电脑端卖家中心限时秒杀商品编辑无法加载商品的问题 修复电脑端商家中心搭配购商品编辑无法加载商品的问题 修复服务端配置 EMail 组件(未配置可使用)的情况下,提交订单报错的问题 修复商品详情页配送地址(省市区)显示有误的问题 修复电脑端我是商家 - 上传店铺 LOGO 不成功的问题 修复移动端我的 - 设置生日是无法弹出选择日期组件

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

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

用户登录
用户注册