网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

SpringBoot中怎么利用Shiro实现前后端分离权限

SpringBoot中怎么利用Shiro实现前后端分离权限,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

苏仙ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

shiro 验证通过后的信息保存在session 中,而ajax 每次传的都是不同的sessionid ,所以主要的区别就是需要修改shiro获取sessionid的方式。这里使用的是登录后将后台的sessionid 传到前端然后存放到 cookie(这个存放的地方视情况而定),然后每次请求后端时在Header中携带此信息,这里起名为Authorization

shiro 中 默认获取Sessionid的类是DefaultWebSessionManager所以需要重写此类

import org.apache.commons.lang3.StringUtils;import org.apache.shiro.web.servlet.ShiroHttpServletRequest;import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;import org.apache.shiro.web.util.WebUtils; import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import java.io.Serializable; public class PowerShiroSessionManager extends DefaultWebSessionManager {  /** * 获取请求头中key为“Authorization”的value == sessionId */ private static final String AUTHORIZATION ="Authorization";  private static final String REFERENCED_SESSION_ID_SOURCE = "cookie";   @Override protected Serializable getSessionId(ServletRequest request, ServletResponse response) { // TODO Auto-generated method stub String sessionId = WebUtils.toHttp(request).getHeader(AUTHORIZATION); System.out.println(sessionId); if (StringUtils.isNotEmpty(sessionId)) {  request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, ShiroHttpServletRequest.COOKIE_SESSION_ID_SOURCE);  request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, sessionId);  request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE);  return sessionId; } return super.getSessionId(request, response); }}

然后在配置中配置此类

@Bean public SessionManager sessionManager() { PowerShiroSessionManager shiroSessionManager = new PowerShiroSessionManager(); return shiroSessionManager; }  @Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myShiroRealm()); //自定义session管理 securityManager.setSessionManager(sessionManager()); return securityManager; }

然后修改前端,这里前端使用的时Vue.js,登录成功后将SessionId保存到cookie中,并将请求中携带头信息

util.setCookie("SESSIONID",data.data.sessionId,1);axios.defaults.headers.common['Authorization'] = util.getCookie("SESSIONID");

这样后端就能根据这个sessionid判断出用户是否通过认证

看完上述内容,你们掌握SpringBoot中怎么利用Shiro实现前后端分离权限的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


分享标题:SpringBoot中怎么利用Shiro实现前后端分离权限
网站网址:http://bjjierui.cn/article/ghocdc.html

其他资讯