城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

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……回归手机圈乐视没开玩笑,当初不行现在更没机会提起乐视,自然就不能不提贾跃亭,这位生态化反、为梦想窒息的老板在数年前,吹起了一个中国互联网史上可谓是空前的泡沫。在留下了一地鸡毛后,尽管贾跃亭一边说着下周回国,但依旧还在美国……
恶意逃废债的时代终将成为过去名单超长!华为官宣提前完成既定产品HarmonyOS2正式版中国风电顶尖的龙头4大风电企业,风电是新能源最后的价值洼地恒星合并生成奇异星体iPhone13还未发布,苹果在国内碰到硬茬或将被禁售骁龙888旗舰上市2个月降400,120Hz65W哈苏相机立OPPO发力,55英寸大屏K9电视,直降800元新闻分析勒索软件威胁有何新特点奔驰与吉利合作的首款产品,smart首款电动SUV曝光曝小鹏P7泊车时失控加速,售后非全自动功能任正非抑郁症两度患癌以及三次婚姻,他经历过什么?68个Python内置函数详解
油性皮肤长痘不用洗面奶可以吗俄罗斯行游影记(95)伊尔库茨克森林博物馆三年半进账超百亿,11万头奶牛撑起一个IPO热文聚热点网 1。9下周大盘将先抑后扬,但是仍然以游击思路为主,公布下周策冬天泡脚用什么好12个冬季泡脚药方推荐给你决战中途岛片尾老照片中与杜立特一起拍照的中国人是谁?废墟孕妇用纯牛奶洗脸有什么好处国有土地使用证年限是多久绿博园一日游作文650字手机里不可不知的个秘密如何在系统中注销

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁