安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

SpringBootShiroRedis共享Session

9月21日 老巫婆投稿
  pom。?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsdmodelVersion4。0。0modelVersiongroupIdcom。examplegroupIddemoartifactIdversion0。0。1SNAPSHOTversionpackagingjarpackagingnamedemonamedescriptionDemoprojectforSpringBootdescriptionparentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion2。0。3。RELEASEversionrelativePath!lookupparentfromrepositoryparentpropertiesproject。build。sourceEncodingUTF8project。build。sourceEncodingproject。reporting。outputEncodingUTF8project。reporting。outputEncodingjava。version1。8java。versionpropertiesdependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterdataredisartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterthymeleafartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependency!https:mvnrepository。comartifactorg。apache。shiroshiroalldependencygroupIdorg。apache。shirogroupIdshiroallartifactIdversion1。3。2versiondependency!https:mvnrepository。comartifactcom。alibabafastjsondependencygroupIdcom。alibabagroupIdfastjsonartifactIdversion1。2。47versiondependency!https:mvnrepository。comartifactorg。crazycakeshiroredisdependencygroupIdorg。crazycakegroupIdshiroredisartifactIdversion3。1。0versiondependencydependencygroupIdorg。springframework。bootgroupIdspringbootdevtoolsartifactIdscoperuntimescopedependencydependencygroupIdorg。springframework。bootgroupIdspringbootstartertestartifactIdscopetestscopedependencydependenciesbuildpluginsplugingroupIdorg。springframework。bootgroupIdspringbootmavenpluginartifactIdpluginplugingroupIdorg。apache。maven。pluginsgroupIdmavencompilerpluginartifactIdversion3。7。0versionconfigurationsource1。8sourcetarget1。8targetconfigurationpluginpluginsbuildproject
  redis配置文件packagecom。example。demo。importorg。springframework。beans。factory。annotation。Vimportorg。springframework。context。annotation。Cimportorg。springframework。context。annotation。PropertySConfigurationPropertySource(classpath:confredis。properties)publicclassRedisConfig{Value({shiro。redis。host})privateSValue({shiro。redis。timeout})publicStringgetHost(){}publicvoidsetHost(Stringhost){this。}publicintgetTimeout(){}publicvoidsetTimeout(inttimeout){this。}}
  Shiro配置文件packagecom。example。demo。importcom。example。demo。auth。PermissionRimportcom。example。demo。common。entity。Uimportorg。apache。shiro。authc。credential。HashedCredentialsMimportorg。apache。shiro。realm。AuthorizingRimportorg。apache。shiro。session。mgt。eis。JavaUuidSessionIdGimportorg。apache。shiro。spring。LifecycleBeanPostPimportorg。apache。shiro。spring。web。ShiroFilterFactoryBimportorg。apache。shiro。web。mgt。DefaultWebSecurityMimportorg。apache。shiro。web。servlet。SimpleCimportorg。apache。shiro。web。session。mgt。DefaultWebSessionMimportorg。crazycake。shiro。RedisCacheMimportorg。crazycake。shiro。RedisMimportorg。crazycake。shiro。RedisSessionDAO;importorg。springframework。aop。framework。autoproxy。DefaultAdvisorAutoProxyCimportorg。springframework。context。annotation。Bimportorg。springframework。context。annotation。Cimportorg。springframework。context。annotation。DependsOn;importorg。springframework。data。redis。connection。RedisConnectionFimportorg。springframework。data。redis。core。RedisTimportorg。springframework。data。redis。serializer。Jackson2JsonRedisSimportorg。springframework。data。redis。serializer。StringRedisSimportjava。util。LinkedHashMConfigurationpublicclassShiroConfig{BeanpublicRedisConfigredisConfig(){returnnewRedisConfig();}BeanpublicRedisManagerredisManager(){RedisManagerredisManagernewRedisManager();crazycake实现redisManager。setHost(redisConfig()。getHost());redisManager。setTimeout(redisConfig()。getTimeout());returnredisM}BeanpublicJavaUuidSessionIdGeneratorsessionIdGenerator(){returnnewJavaUuidSessionIdGenerator();}BeanpublicRedisSessionDAOsessionDAO(){RedisSessionDAOsessionDAOnewRedisSessionDAO();crazycake实现sessionDAO。setRedisManager(redisManager());sessionDAO。setSessionIdGenerator(sessionIdGenerator());SessionID生成器returnsessionDAO;}BeanpublicSimpleCookiecookie(){SimpleCookiecookienewSimpleCookie(SHAREJSESSIONID);cookie的name,对应的默认是JSESSIONIDcookie。setHttpOnly(true);cookie。setPath();path为用于多个系统共享JSESSIONID}BeanpublicDefaultWebSessionManagersessionManager(){DefaultWebSessionManagersessionManagernewDefaultWebSessionManager();sessionManager。setGlobalSessionTimeout(redisConfig()。getTimeout());设置session超时sessionManager。setDeleteInvalidSessions(true);删除无效sessionsessionManager。setSessionIdCookie(cookie());设置JSESSIONIDsessionManager。setSessionDAO(sessionDAO());设置sessionDAOreturnsessionM}1。配置SecurityManagerreturnBeanpublicDefaultWebSecurityManagersecurityManager(){DefaultWebSecurityManagersecurityManagernewDefaultWebSecurityManager();securityManager。setRealm(realm());设置realmsecurityManager。setSessionManager(sessionManager());设置sessionManagersecurityManager。setCacheManager(redisCacheManager());配置缓存的话,退出登录的时候crazycake会报错,要求放在session里面的实体类必须有个id标识returnsecurityM}2。配置缓存returnBeanpublicCacheManagercacheManager(){EhCacheManagerehCacheManagernewEhCacheManager();ehCacheManager。setCacheManagerConfigFile(classpath:ehcache。xml);returnehCacheM}BeanpublicRedisCacheManagerredisCacheManager(){RedisCacheManagercacheManagernewRedisCacheManager();crazycake实现cacheManager。setRedisManager(redisManager());returncacheM}3。配置RealmreturnBeanpublicAuthorizingRealmrealm(){PermissionRealmrealmnewPermissionRealm();HashedCredentialsMatchermatchernewHashedCredentialsMatcher();指定加密算法matcher。setHashAlgorithmName(MD5);指定加密次数matcher。setHashIterations(10);指定这个就不会报错matcher。setStoredCredentialsHexEncoded(true);realm。setCredentialsMatcher(matcher);}4。配置LifecycleBeanPostProcessor,可以来自动的调用配置在SpringIOC容器中ShiroBean的生命周期方法returnBeanpublicLifecycleBeanPostProcessorlifecycleBeanPostProcessor(){returnnewLifecycleBeanPostProcessor();}5。启用IOC容器中使用Shiro的注解,但是必须配置第四步才可以使用returnBeanDependsOn(lifecycleBeanPostProcessor)publicDefaultAdvisorAutoProxyCreatordefaultAdvisorAutoProxyCreator(){returnnewDefaultAdvisorAutoProxyCreator();}6。配置ShiroFilterreturnBeanpublicShiroFilterFactoryBeanshiroFilterFactoryBean(){LinkedHashMapString,StringmapnewLinkedHashMap();静态资源map。put(css,anon);map。put(js,anon);公共路径map。put(login,anon);map。put(register,anon);map。put(,anon);登出,项目中没有logout路径,因为shiro是过滤器,而SpringMVC是Servlet,Shiro会先执行map。put(logout,logout);授权map。put(user,authc,roles〔user〕);map。put(admin,authc,roles〔admin〕);everythingelserequiresauthentication:map。put(,authc);ShiroFilterFactoryBeanfactoryBeannewShiroFilterFactoryBean();配置SecurityManagerfactoryBean。setSecurityManager(securityManager());配置权限路径factoryBean。setFilterChainDefinitionMap(map);配置登录urlfactoryBean。setLoginUrl();配置无权限路径factoryBean。setUnauthorizedUrl(unauthorized);returnfactoryB}配置RedisTemplate,充当数据库服务returnBeanpublicRedisTemplateString,UserredisTemplate(RedisConnectionFactoryconnectionFactory){RedisTemplateString,UserredisTemplatenewRedisTemplate();redisTemplate。setConnectionFactory(connectionFactory);redisTemplate。setKeySerializer(newStringRedisSerializer());redisTemplate。setValueSerializer(newJackson2JsonRedisSerializerUser(User。class));returnredisT}}
  UserServicepackagecom。example。demo。importcom。example。demo。common。entity。Uimportjava。util。LpublicinterfaceUserService{voidaddUser(Useruser);Userlogin(Useruser);ListUsergetUsers();}
  implpackagecom。example。demo。service。importcom。example。demo。common。PasswordUimportcom。example。demo。common。entity。Uimportcom。example。demo。service。UserSimportorg。springframework。beans。factory。annotation。Aimportorg。springframework。data。redis。core。RedisTimportorg。springframework。stereotype。Simportjava。util。ArrayLimportjava。util。LServicepublicclassUserServiceImplimplementsUserService{AutowiredprivateRedisTemplateString,UserredisTOverridepublicvoidaddUser(Useruser){user。setPassword(PasswordUtils。saltAndMd5(user。getUsername(),user。getPassword()));加密redisTemplate。boundHashOps(users)。put(user。getUsername(),user);}OverridepublicUserlogin(Useruser){user。setPassword(PasswordUtils。saltAndMd5(user。getUsername(),user。getPassword()));加密Useru(User)redisTemplate。boundHashOps(users)。get(user。getUsername());if(unull!check(user,u)){}}OverridepublicListUsergetUsers(){ListObjectlistredisTemplate。boundHashOps(users)。values();ListUserusersnewArrayList();list。forEach(u{users。add((User)u);});}privatebooleancheck(Usera,Userb){if(a。getUsername()。equals(b。getUsername())a。getPassword()。equals(b。getPassword())){}}}
  controllerpackagecom。example。demo。importcom。example。demo。common。entity。Uimportcom。example。demo。common。response。BaseRimportcom。example。demo。service。UserSimportorg。apache。shiro。SecurityUimportorg。apache。shiro。authc。UsernamePasswordTimportorg。apache。shiro。subject。Simportorg。springframework。beans。factory。annotation。Aimportorg。springframework。web。bind。annotation。RequestBimportorg。springframework。web。bind。annotation。RequestMimportorg。springframework。web。bind。annotation。RestCimportorg。springframework。web。servlet。ModelAndVRestControllerpublicclassSimpleController{AutowiredprivateUserServiceuserSRequestMapping()publicModelAndViewindex(){returnnewModelAndView(index);}RequestMapping(login)publicBaseResponseStringlogin(RequestBodyUseruser){BaseResponseStringresponsenewBaseResponse(0,登陆成功);SubjectsubjectSecurityUtils。getSubject();UsernamePasswordTokentokennewUsernamePasswordToken(user。getUsername(),user。getPassword());subject。login(token);response。setData(home);}RequestMapping(register)publicBaseResponseregister(RequestBodyUseruser){userService。addUser(user);returnnewBaseResponse(0,注册成功);}RequestMapping(home)publicModelAndViewhome(){ModelAndViewmvnewModelAndView(home);mv。addObject(users,userService。getUsers());}}
  redis。propertiesshiro。redis。hostlocalhost:6379shiro。redis。timeout1800000
  applicatin。propertiesserver。port8080server。port8081server。port8082spring。redis。host127。0。0。1spring。redis。port6379
  index。html!DOCTYPEhtmlhtmllangenxmlns:thhttp:www。thymeleaf。orgheadmetacharsetUTF8titleIndextitlelinkth:href{cssindex。css}relstylesheettypetextcssheadbodyh2初级SpringBootShiro小栗子NodeOneh2!h2初级SpringBootShiro小栗子NodeTwoh2inputtypetextnameusernameplaceholder请输入用户名inputtypepasswordnamepasswordplaceholder请输入密码登录点我!不登录进不去inputtypetextnameusernameplaceholder请输入用户名inputtypepasswordnamepasswordplaceholder请输入密码inputtypetextnameshowplaceholder自我介绍注册!!似懂非懂!bodyhtml
  home。html!DOCTYPEhtmlhtmllangenxmlns:thhttp:www。thymeleaf。orgheadmetacharsetUTF8titleHometitlelinkth:href{cssindex。css}relstylesheettypetextcssheadbodyh2初级SpringBootShiro小栗子NodeOneh2!h2初级SpringBootShiro小栗子NodeTwoh2退出登录tableclasstabletheadtrthUsernameththPasswordththShowthtrtheadtbodytrth:eachu:{users}td〔〔{u。username}〕〕tdtd〔〔{u。password}〕〕tdtd〔〔{u。show}〕〕tdtrtbodytablebodyhtml
  以上两种配置各打包一次(记得留着打包好的jar包)
  解压到无中文目录,修改Nginx配置文件
  upstreammyapp{server127。0。0。1:8081weight1;server127。0。0。1:8082weight1;}server{listen80;location{proxypasshttp:proxysetheaderHproxysetheaderXRealIPproxysetheaderXForwardedF}}
  到此,先启动两个jar包(分别是8081,NodeO8082,NodeTwo)
  然后启动Nginx
  浏览器访问:http:localhost
  刷新看看。。
  随便在一个节点上注册,登录,然后刷新到另外一个节点,发现不用登录就可以访问权限资源
  。。
  github地址:https:github。comzhiyongzhaobootshirosession
投诉 评论 转载

山东人5G进万家系列活动来了!套餐再降10元以上!买手机有补大众报业经济导报2021051010:02:33经济导报记者吴淑娟经济导报记者从山东省工信厅获悉,为加快提升全省5G用户普及率,自5月中旬至6月下旬,将充分利用51……市值蒸发近3。8万亿,阿里重回起点,马云不复首富地位阿里巴巴在国内一直是大家心目中的神话自互联网诞生之初,就水涨船高,然而现在这个神话如今也在走下坡路。2020年的时候,阿里巴巴的市值为8000万美元,但是近段时间,阿里巴……调查新能源车充电桩基本靠抢,有人凌晨4点起床深夜十一点,北京顺义牛栏镇的新能源车主老张又来到家附近的这个充电站寻找车位。他告诉记者,由于这里停车免费,加上夜里11点到早晨7点是电价波谷期,每度电比波峰时便宜6毛钱左右,使……先进的技术在商业上不一定就能成功最近大船在读浪潮之巅这本书,提到了微软公司和苹果公司早期在图形化操作系统的斗争。麦金托什VSDOS我们现在见到的个人操作系统,一般是微软的Windows和苹果的Ma……SpringBootShiroRedis共享Sessionpom。?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsih……EpicGames获索尼和乐高20亿美元投资用于研发元宇宙场埃菲社近日报道称,EpicGames从索尼和乐高手中获得20亿美元,用于推广元宇宙。美国电子游戏开发商EpicGames在4月11日宣布,已从日本公司索尼和乐高的所有者丹……一次充电续航200公里!新日小刀发布2款新车,搭载石墨烯电池请您在阅读前,先点击上面的关注。感谢您的支持,我们将为您带来更多有价值的内容。在互联网时代下各类新兴行业层出不穷,大街小巷从事外卖员、快递员这些新兴职业的人不在少数。当然……手机解锁你选面部还是指纹算是一个存在很久的争论了,其实还可以细分:面部识别分为2D面部识别和3D面部识别,大多数Android手机采用的都是2D面部识别方案,安全性不算很高,另一种是捕捉3D景深……苹果13Pro和苹果13Promax两款手机之间,该如何选择其实大家完全没有必要纠结于购买哪款手机会更好,如果大家在预算足够的情况下,当然是直接入手苹果13Promax这款手机会更加合适一些。不过在相同内存配置情况下,苹果13Proma……6000mAh7。2英寸新机来袭,6nm芯片坐镇,预计发布时荣耀自从去年脱离华为独立之后,就不断地研发与创新,并积极寻找供应商。经过不到一年的打磨,荣耀在今年交出了一份令人满意的答卷,不仅挤进了第二季度全球智能手机销量排行榜前十,还于六……北京市场监管连夜赶赴360公司总部进行调查3月15日晚10时许,北京市市场监管综合执法总队和朝阳区市场监管局执法人员,来到位于朝阳区酒仙桥的360公司总部,针对央视3。15晚会曝光的虚假广告问题了解情况。央视31……回归手机圈乐视没开玩笑,当初不行现在更没机会提起乐视,自然就不能不提贾跃亭,这位生态化反、为梦想窒息的老板在数年前,吹起了一个中国互联网史上可谓是空前的泡沫。在留下了一地鸡毛后,尽管贾跃亭一边说着下周回国,但依旧还在美国……
让每个人享受科技带来的乐趣,这条路确实很长,但雷军快走到头了动力电池之王宁德时代真全面屏!中兴最新屏下摄像头方案曝光现在很多人将微信朋友圈关掉,这是为什么,说明了什么?热点个人收款码有调整?微信支付宝最新回应工信部尽早研究明确新能源汽车支持政策稳定市场预期一上线获得250w认购,这个爆款能够为亚马逊运营带来什么启示如何评价国产手机越来越贵?这17款App违法!为什么好多人不愿意换5G?听说,90的人都用过这10支口红秘密收集个人数据,涉及设备超6000万台,谷歌下架数十款应用第二十六别径小猜欧文我最好的老师读后感三篇精研帝王术的韩非子,为何落得身死国灭的下场我心雀跃包小姐与鞋先生2020FW新品上市气质棕西安寻面记人见人爱的成语接龙大全猛男穿洛丽塔?我人傻了村级土地利用规划启动后有哪些致富机会?我和百万年薪的梦豪门女婿多难当?李政宰和三星前太子妃热恋7年,48岁还没能结如何调节孕期饮食呢看过你就明白了

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利