Shiro的三种授权(十二)
前提就是在Realm的授权方法中查询出权限并返回List<String>形式
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 从 principals获取主身份信息
// 将getPrimaryPrincipal方法返回值转为真实身份类型(在上边的doGetAuthenticationInfo认证通过填充到SimpleAuthenticationInfo中身份类型),
ActiveUser activeUser = (ActiveUser) principals.getPrimaryPrincipal(); // 根据身份信息获取权限信息
// 从数据库获取到权限数据
List<SysPermission> permissionList = null;
try {
permissionList = sysService.findPermissionListByUserId(activeUser.getUserid());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 单独定一个集合对象
List<String> permissions = new ArrayList<String>();
if (permissionList != null) {
for (SysPermission sysPermission : permissionList) {
// 将数据库中的权限标签 符放入集合
permissions.add(sysPermission.getPercode());
}
} // 查到权限数据,返回授权信息(要包括 上边的permissions)
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
// 将上边查询到授权信息填充到simpleAuthorizationInfo对象中
simpleAuthorizationInfo.addStringPermissions(permissions); return simpleAuthorizationInfo;
}
1.applicationContext-shiro.xml配置
aaarticlea/png;base64,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" alt="" />
解释:访问上面这个需要有item:edit权限。
2.注解方法:
开启controller类aop支持
在springmvc.xml中配置:
<!-- 开启aop,对类代理 -->
<aop:config proxy-target-class="true"></aop:config>
<!-- 开启shiro注解支持 -->
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>
在controller方法中添加注解
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA54AAAF1CAIAAAAP8aLYAAAgAElEQVR4nO3dvW7bSP/2cR1PDoGF/BzEpk4hg4XrbVIETiH32sKAgSDulMbFFkYEd/kbUBUgiJt1oyK3io2B2/Vd8yn4Nm+/4ZCiRGn4/UDYdfgyHFKUeGk4JCcZAAAAEIXJ0BUAAAAA+kG0BQAAQCSItgAAAIgE0RYAAACRINoCAAAgEkRbAAAARIJoCwAAgEgQbQEAABAJoi0AAAAiQbQFAABAJIi2AAAAiATRFgAAAJEg2gIAACASRFsAAABEgmgLAACASBBtAQAAEIljiLa/v1y/O3/83XIUmjzfnF02bL313buzux8HqxEAAMBeHUG0fb45u7xZtx0lO7t8FzLKM5lnmrPLd/5Xy8pqxXaojw/RFgAAjMzw0XZ9J8YvzyiP8Ghr5FHnkA7L6hx//Ytz5mx/9RoRbQEAQEyGjrav9+eXH768thzlJQU+qcnWExnbZs1dJvNP3Hs7cY5oCwAAYjJwtN0+fpCilWeULST55X/bbbTO0pzFhi/LLip8RXacIMuKrgj56+rZN/bskmgLAADiMWy0/XHlzF4Noxp4OglkrkRrp1IjBHv+lpa7S4eE/jr4Orbh9vGD2n2ZVlsAABCTQaNt3xeQ5fzR05liq7+NvOjsmdCqw4Pnj8AaespvasG1o605hGgLAABiMmC07e2eX4GNmv62WPufWUC0bfxbqoa0ItIERoGeOiusaPt6f060BQAA8Rou2u7hArIsODg6s6YUbf0Nvf6/w1ttGzO3FGrbdEig1RYAAMRssGjrCVWd85a/OdPZatsYFj1NuSF/h7faBrfFOjoHCxx9bdd3786u77dZljeNn3EZGQAAiMhQ0bb/C8j8GTTTo60z1Eo9Fho774b0ZPBH25DKOy8ac5a2vrN6ZdT59cdVOfD88Xer21AAAAAcuWGi7fbxQ9l22GKUR2NH26zpzgmZkHed8zojpt0e3FglT8U8w9XypQkAAABGaJBo29sFZI0COwl4JjaG+ANlQP9XX89df4GecAwAAIBs6PvaAgAAAL0h2gIAACASRFsAAABEgmgLAACASBBtAQAAEAmiLVxW6SRdDV0JoB+rdJIsNkPXAgBwCENG25+fzkuffg5Yj5P289P5+fnHry99lrlKJ70kgVU6KR1tTn4/yd4k2a8s+5xkbybZN2Gyz0n2x0IftMreTKyBw/mWZm9SfdCR1dCh1xr63srNIjninRAA0KOhou3L149KoP35qfqHknfP+w9tfVEqbAxVavzy9eP+U3v/0bavYKsVeLSp4v2kSITfUjnarlyjpFjmnLizVfZmor2kINgi2vZbQz//snqPtp638qh3QwBAb4aJtnYy/PmpyGfaqJevH48z3TqjbR5lq/oa/zwRvQfbI88Un5PmaPstbRO/9hBtQ0pzRNudy+zBAZfV9FbScgsAozBItK1yrD7s08/MDI164+7xEKPtp69fP+br9vL146efrjU9avuIoacRbX8titPZpk32xyT7HB72ibYDLav5rTzqPREA0I8Bou3L1491iq26HZQhUAuNPz+ZZ/TV/gpGtjS6MpRjjRRqhlK5wKLVVR+nD9R7TeQr9vL146efRbI1Qry6LH1wvgHsenhGeboq++ZyrUI92nnst1u7jKZdpU+tq8XXUagxyJxCLXDoKPJr4T7Rn7/er/QpJ97+A2rvgqrMPDrn8ybZr3Kab8os36TKGd0VUsfwdjX0UJdlBce8e6taYMOyhBo66qksK28+zxtlta0UimwLAPEbINoW7bNlxiz+r0ZbIWzqTbjav4zWXTW/eqKtp0ChN62rFK1+n37mobYIuEq0LYbU82s1NMJzwChPVfS5fn5SgrRdujrvZpE4eyPoUVaPuptFUoeFVeoIo+2irVV6SBhRs7AnZHfx3pW9fKOEMJrHtWp41cSYR9s3Sfar+kMt2eprWy3RKNDZatuqhj6b7A+l8PcTbVnGP1sty66h0Z3gc1Kn2yLUpvW8LfvpSjs4ACAeh4+2L/kZ+zL0vXz9eF782+iQYGa2csqKPGlYtPUU6GowVjmjrbJKHz9+dHSvEArw1N63YsGD5GWZW0A88qvZ1hsPXM1iraKtVfqwDW3eZNYqOJr3WKgmqzo8bLI/ygKNaOusgLH0/UZbnbos8ex/2LLMGiobQR2Sdwgx1rFFH4yyLKItAERvqGhbhSql8dYKg/LpfL1Z12rNDIu2coFVTR3dB1yFGtWtulzYbcSuRbnya7FAzyhPVUIbqoNbbdUx1jSbRaI3l+4UbV3tr8NFW8c9vxStguN76+z8TtHWioD7jrZqlwO16bQhX3aKtkbP5moaoi0AoNHho20eAJXGWq3R1u5rG9JFoFurrb/PgcK+UYM/2upz1unbyOlDtNoa+dpcB08TaTHKmGKzSKxutztH2/ZJdj8dEpouIGsbbd0dG06h1VbtFWAs61t6Qq229LUFgPgN1iGhujXWz/yPgDPmntslKK2ZZXhztVPqnVDD779gdV1wzWlNpA6zO/JKq6w1zHpGqQODo23dnixoyrZp6miyrWbIE2ZAtFVnK2Kpu6/tkBqTkzs42uEsyzKra6wxfYdoq2bKokk1MNoKNayLtfqw1j2DyyoZl8GJbdveZTlr6OhrK7QQt462JFsAGIHhLiOTx9p3MNAv9XK2Opq3W3COym9gIHQ6sFNvzb6DlzpB3Q1BjLbmDD+Vagi3dmg3ytPDwb7phFio9762ec8Dc6TaHyFZrBZJFR4cTanGBWflwI0yV2Z3cRgojUjtrOoV+uatCbIs0y/wVzOfedMA5TIyf7SVbmjwXhmo3smhcw0z61KtQn6JW3nLgm/GXSPUsVaBzmX5a6iNlbNsy2h7PD+aAAB7NOTNv/YnuKvBUWjR06L3RTman/fw0IYT1HB1FE4OTbYAMA5DPbJBex7tp76fakC0dbOCrPtxb85beI2M/wIynBhabAFgNIZ50K749IIeSyfaiiXK3RFKRg8B4KStUk5EAMBYDBVtAQAAgJ4RbQEAABAJoi0AAAAisUO0nUx48eLFK84XAOA0EW158eLFy3oBAE7TztF2B9qjFHYpaEc/P+3lNg2D6329DryhXDfYfT8pbjebP3/rmzmL45EBx8nxuIH2lfdtDW531RnRFgBO2VDR1n7wrP4s3P3dGMx2kMQWdtOt/hd5stHW/eSI9+XjqYzHsZYzCelQflztUFpEW7nyTVuDhxR0QrQFgFM2TLS1b9f681ORmbRR7icKnCTHs3/jWLH9kB6J9jnxhjmxuFOIthK58k1bg5bbToi2AHDKBom2VY7Vh336mZkR0PEc2BNlpnn9iWzQie2NVZhr9yDc2KOtuDVouO2AaAsAp2yAaPvy9WOdYqtuB2Xc1SLgz0/mqXv1vL4ReY1T/uVYI1Pa5bs7CBT1qacIrMbL14/ObgeuaGtUy1WgVI2Xrx/PP33Nl5VvPXOdxY4PUg19o8ILVOJ6XndpVk81ugSyVfZmUrzeK3P+WtTDq5d20l+Zsc6am+yPSfY5nzfJfpXTfMvMkt/btXQWaI9Sx3aufMB2Idu2RrQFgFM2QLQt2mfLbFf8X422vuCld1Yo/2W07qq50RdtG4bVSU0t31MNz4NxHR0S3JW3C3RVIw+GH7++VH+4e3kErWvzKHkK/deH1oNEz9t6M7V3WZtF0vm5qO/luPnNGpxnx2p41QiaR9s3Sfar+sMq2RltxQKtUc5W21aVD7PLthwroi0AnLLDR9uXrx+LIPbx60sehop/Gx0SzPRTTlmRJ+0p2ipLqxfuqYarmVmdyp3ZGwt0VUP7w9WVw7denvTtz7ZWgXaHEWVtGtvLpWUdLNp+ThwtuN+ystV2U/yRF+guObBAa3ai7fEi2gLAKRsq2lYJSGm8tQKa3ifXvMdAHRGtgNVTtA3JqM6kap+cb2jPFQuUZuscbeUaNoxyFmjFcs8PDtdPFfeyDhZt31un+3eMtv4CibangWgLAKfs8NE2z6tKY63WaGu37QWc7N9Xq60YbYMubNNv7xDaVSFw5C7RVqhhwKj+Wm39y9qhg2jbaOtOqztEW2magVpt6WvbHtEWAE7ZYB0SXspLoH7mf7iTqNYq6LldgnLevmwMdPVkNa62UucO75MafNcGrfKemOkrcK/R1tXo6h0V1te2xY8KaVndA5k7HVqNpjmj/6sxvT/ahvS1VX1L65sY5E9YCI22QuWDkGw7INoCwCkb7jIyeazVAGtEJ2dHAPN2C85R559+Vvdn0EdYBXpjoVQNY3hYhwTvenWKtp718tSwofLShjLGyllW/adnWTnpvraS/Mau7vsPZFmm321A7Q5r3oVAuYysQ7QVC8yKEqoK/FrUozpXvgn3te2EaAsAp2zIm3/tT3CnARyttuEWFppsuyHaAsApG+qRDUpD3cvXT30/uoBoG4NVOiGadUaLbWdEWwA4ZcM8aFc/id3/Q7mItnHYLBLSWTerlDbvroi2AHDKhoq2AHCU+GYDgFNGtAUABd9sAHDKiLYAoOCbDQBOGdEWABR8swHAKSPaAjtYpVzoFhu+2QDglO0cbXnx4sUrvlfvVumkxK8hjAL7PAZCtOXFixcv67Uv7R+kIcyhxIbJ5GifbxLrc0PW84vp/KmXouxbUBvPq/Fsw06bd7NI1D1n/2/PyPZ5HIETOu/272Py9nLy56NrZ35d/Hk5eVu8kr9fpQlco9opvhXKz5Txz2AtP+vS5Kt0kiwW3W9hWpfrePjXcAelDksOnqVF2d5JfU9L2yyStm9JLAngaT69mK+7z3/Yw/wQTwXp9TBfDd4skuM80seyY5tONtqyz2MMIom2hc3f173kV4/NIpmki0WSf6I2iyRddbk7fj/Rtlhy96OHMqcV1QY8Jp1AtPUWQ7Tt7KCH+UEe5ryfw/zRPn0ulh3bdKrRln0eozBItM1D6l/Pq7/KptYqsBr59fvd5O3l5K9nddTq72tzrpIr2jY16OaLKF7Xi38b6p4/IGuzSNJVkWz1Bz9p53oczaDCeSB1VOMnWhmaL8EYnQ8XuzkJ1fB9nfq7TLkq70x3jd9wxpkyeyuKm9dftLTlhfVqrEbD4lwrL70pYctyb3173nq8NJfyc0h8Q23r+cV0mr9u7eCqjL2Y7ivaejaUfxvKH4d8vrDdJmQbNmaUclCLD5F3vYw92Vq08B57vgH0r5HA7yi9nsE7tmQ9v5gtX7L1rXOXU3c2Y08T9kPj55b560su8GU5Uwosgqw+sHhdLbfN6yVhn5/sfZ937qLeDWXNpR8cQ+fyHHwDQ3nXj4Nz782y7Gk+vVpun+aOUeZcs+VLh7mMn3yeD+w+DRhtjZeeX8Vo65yr1DbabqqU3DLa5qG2CLh1tNU/a9r5EuMbQP2I6qOcv0SdXw1KpNbHFx8fV3Ospxr6hNISzYFi5YVpg45tvm9C4XSUcbSWN6ir7KAmghZrIkRb6U3xLMuzb2j/cGwa4V9FPYqFt2z3WN9a0fZlOTO+N3ePtvKhrUsLlr7lHbuDuQjHdKHbUH9fQz/LDd8AAcHAdXAN2G30sj3Rtmlr+KNSy4a14lg4e9hmmb6D6Tvb9mFW72ye/dATbT0FNrTL9t1qyz6/v33eswE9G8pzuPF9mfuPGg0HepdOHwfP/lnE02JKba6n+dQssEy3+lzrW/XnnLwsXw33bNBom35X/3m3yoKirWOukqdDgmvUc6oWGKbMk5tFkiRJusrqfdneV+uI42oBUT5OTSlHyGNCYpUPUZ5qZNpHVGwmdvwYdle++A3g2wgi54S+zesp27/KnuXtIdo2NInZy/LtG/oc6pTePcoI1e36TtjR1hxyhB0SAjZ1FS60T1SXbaiOcm/bNh+iwPUyJ/AU6NsY8mIbt4b8ue4YbYsDeZZl2XZ5Vfxz+zDT20frY6pvP5SjrafAIlI4zlHYU+6Ifd6epM993reLihvKe7jxVVZcVsiB3qXLx8G397rOWsyfipL1WepleU99iMvy1nDPBoy2dXeCvGH1evFvUIcEx1yldtE2oPOurQqUVXTToq1wIsb3o9Rqb7R+jwakXevnpvOD1/TbuPqOCs56nsoXW2qzSNI0LUsNS1FitJXPc0lfE0HNAUcbbX37htzC4N2jOkSNmhVtrW/DE4m2zjdPbZjpvA3r917YSVp9iELXS/9oyQV6Pw7+n8S+Girtjg37fQjx+FefkzXPfnr3Q/moLBeY2y6vpC4Hpxdtx7rPKytq76LihvIebhq+zN3LCjnQu3T4OOSEvdcVbWcPWy3IqovIP1YNvXrcy2qq4T4dQ7QtervarbZFq6qvr8IurbZGM3AYRzwrQ27HVtuQ7/52Xw3+Q5QvUBUfbKlK7moIlc83y6bojpwsNvWPgSZitBV/RssVCcmQraNtw5vWa7T1HU9aHRZCat4g1lZbe+E7bMNibC8fIt94q63I/Q9/WeHRNmin0XsJtZq15j2WC82o3VptPQXqtsur6d7an9jngxfXaZ/X2R3ZnBuqc6utuKyu37xdPg46fe/tv9VWXFZwDffgaPraFqGzsRuuc64qBIfNVeXj+jq28tUUc12hRQ+w9d5rNaup/ZSUCQM63VifCvtjIn9FmUcvoRr1+ESqj+PD6an8Kp0kaVp12kjT4DtJCIV6Nq/ne6NpleWZfW+M93uqQ7QVliVXwfdDoXPFmzi+qp7mVX+s7cPMca1A/iMstNND42Hes26e3aYeKrZfGfvXDttwlU48e3u7D5FntF6Qts/5P5UhX0TFT+cW31GOarSasxbadU/j2Q/VufQug74CddapVTsHKNjnG2c+5D5vFy1EW21DNRzNg9oSutVQ1+njoNP2Xj2Var1mHX1tA6/FFJbVWMN2n5Q2jiPaaoGyvmXB9eJ7cS+Fprk6RtssM68k2y3aZkZrqvV1VZ2kMIKJ0QKnfYRcLbOuz1L9wfF+8HzVyKxDmr8a/srnw7VDZfDnWi3TPH/k3LxWFZ1ngoxV9q+XpxqZcLiwC5SaB4TfJo5lSZvXsbCAN6VbtFUujLWvda3POl0tty/LmfmV1+rbq/Ew731TnKOM7WS8CcI+Y5bWahvmMzp2mA7vl3+9rI+Afih2Fqh9HKQvh0m6CvyOMobb77Pn/XLzNoiaNygQ9kP7+F1Nb+yiUoHGcPseCOoE5lj2eefCJsPs855dVN5Q1lj521v9p//j4F9lt04fB8/ea3yZO5oqXDc0aLoWU/ykyB/YatvtJdseQ4cE4BR52kIOtHTrfFn39th9WqX7+fJqsfij3C7HINaNs2vHmF2xz5+GEW6ooT8ahn19Uoi2QFd6m8FBWUHW7uV4JLTG+yGM8OgVLtaNM+zxm33+VIxwQx1VtN3fJ4VoC3QXfmlc/8yzfUf4Db2/nlQtK3GE2+Y4xLpxhjt+s8+fkhFuqKOJtvv9pJzQg3YBAAAAH6ItAAAAIkG0BQAAQCSItgAAAIgE0RbAyVgFP/cDADBORFsEG/hejXuznjtvyX5aQi/11e7Kv/9qKUKvzF3PpduJZ9lOt+8t75ce4S4MAKgQbfuzh0eBByzwgDd/ItruhbFZO97pr+UeNMBNb1redEZ+/ni3ug/7hA0AwKEQbftz2Gg74OMC0KfiB0q5nxj/DDaiaNup5db1iGwAQISItv05aLSlDSoWm0UySReLJH83N4skXXXpUDqmaNul+kRbABgJom1/5Ghr9ByYKD3+PKOy8qIZV/fIptPW6qOq9Kn0JWrjxFHeDpraXHqSFyrf4GU5q3pbXkznT+o4pSOmkZM8c4mjvN06tblmy5dy+NN8erXcPs2FGraVP9Bss0jSVZFs9WulpM2bZdYDydQNLO8A1ejQ92O7vJrOH/KtMVu+FButXmtpQ2WZ/n4Zb5n8VuajfdG2fbYl2gLASBBt++NMqbu12hb5pBhjZOcqvJhHbH06/V87tRw7ptD7RWwWSV0dvfLBzczruRQWX5YzZdT2YaZEInku36hyCjtFPc2n5rLK0FaE2mLR69sd++kWz+rdLJIq4NbR1rN5HXtD+S/fDuCYvMl2eZVn1uoPZYt5NpT+fmmttr63suCPtq2T6gifqAkA40S07c8eOiSYgx2TVYG6WpB11Ffn8nTRbe69ay3eXmVl4cbUodliPXdfGp9tH2Z6iFQzqziXd1Q5hZmitssrx5DZwzbLrBPruz6Su8yxm0WSJEm6yupN5du8nl3DuwPIg0TVutebpdxivg1lblVlQ3nfynJQX9E2/4lFrAWAkSDa9udA0dZ5QFfb84yz1NY5aaV12dne6x7lrKUjYNTTdIy2WdlMOJ3qNy5Y36qntu3OAO65mkaVJUtB1p5mT9G2bL7N9GgrbF5rZ1M2b9MOYEzeqCHaChvKSr3Khmp6K9Vy3Nq22u5wzzAAwEkh2vZnmFZbe+HBqUU7vx0y6iCttqrt8qoOo/6sI80VMuooWm0VZcjt2GobsqWHbbUNeSvpawsA6IJo25/GaOtpORJG6QdwT3dVrTNBcAuV53DvHBXW11bt+7BjtNXPXBt9NwPnChgV1te2zK+N0TZvNQ3MUa4NrQdYz+YtZiwb21vsAD1F28YNVfS73T7MtMvFAt5K7pAAAOiCaNufxmirX2lmHGedo+Qr4M2Tzp7SrNDjnsszynGGW6qKnGUD04h+NwMzhhpj9ajknsszSrnLgeNSfW2snGUdrbZtsq0/2mby5lXHJItN3Z2hKsL1fvnfSjdvtPVsKLXjwdVy+7KcqWOlt9L/ptQrx31tAQAuRNujxmXdpynW57Ydh86P7uMdAYARINoeNaLtKer4qFyE6Hw9GA85AYBxINoeNaLtqWnVzxatdXlQW6nspMG7AwAxI9oCAAAgEkRbAAAARIJoCwAAgEgQbQEAABAJoi0AAAAiQbQFAABAJIi2AAAAiATRFgAAAJEg2gIAACASRFsAAABEgmgLAACASBBtAQAAEAmiLQAAACJBtAUAAEAkiLYAAACIBNEWAAAAkSDaAgAAIBJEWwAAAESCaAsAAIBIEG0BAAAQCaItAAAAIkG0BQAAQCSItgAAAIgE0RYAAACRGFu0/f3l+t354++Wo4bzfHN2+S5/XT0PXRkAAIDjNrJo+3xzdnmzbjvKsn38UCXOg4TOH1dtl9JmdbIsO7t8Jw3J/7AnCGcUBQAAsCfjirbrO7Fd1jPKnrJVauxDP9FWjeOZNUoa4gymalHGyzmxZ0EAAAB9GVO0fb0/v/zw5bXlKNOPq8vD91voLdoaf9ij7H96wqhnMuIsAAA4vBFF2+3jh7O7H21HWX5/ufa22iq9Y7Uyn2/Oru+32Y8roxvD6/25EVufb87MnC1EW9eyjM4S+SvP4nYfA2eDa+YKps7mXn+09b+k7QcAANDZeKKtp+GzbZtoFU/Nht7t4wcl9f7+cq2k2yKGFrOoU67v3p1d32+dc8k19C0r26nVtoqejUk0pGmWFAsAAA5mNNG2pwvIFHnzrRpwrXssqCUbbbFqFwh1lLtrhB1tvcsSViqkr6190Vi3DgkhswMAAPRrJNF2f/f8+v3lumpzrTsbKC812koBuq7D9vGD0oJbsaOtd1nC4jxXhrXqKduqswFdEQAAwMGMI9r2cwGZm9IxwNuxwd82XIyVSnBHW18niuAOCXYzrXMCp8bJWrUBAwAA7GgU0XZ9Z/debR4V5seVeQlXt24PP64u313d3biabLOAvrYW++q0rtFWmtFZjsHTzwEAAKB3Y4i2PV5Altk9AYzODOYNCrTLyHw9evMZjdLWd9bpfiWIi8uyxlZ3SGjsa+v8ZxbQ/tqhTAAAgH7FH22F3qsNo6IUeIcE5wSZcueEkFk8t1wIrzAAAEAr0Ufb/VxA9vH/nfbfCunaL2liaYKQNOwZCAAAsLvoo+0e5BnxdP8LAAAQKaJtS8fQ5tpTey0AAEBkiLYAAACIBNEWAAAAkSDaAgAAIBJEWwDH6vlmtyeq7GR9t8sjuAEAwxhbtN3PvcB68XxjP7JhwGXt/Jw2YDfPN2fmQ7B/XF2+O7u+32a/v1y/czwDpfWO7S3Q9Ug/AMCRG1m09TwSrOlpYSrjMWDawa9NOVYFiLbHpPNb2d+yzMfRHec7spcN9ePKsYvWz7Ve3/UXbRsKPNQ+AADow7iirecMY/jJR/chsBLLsZBoeyzR1tHEeGT2sKHWd841/f3l2ptEA0uuN2ljgfUEAICTMKZo+3p/bp7fDBhlcjYmKYi20Ti6aOs8R38E+t9QP67cPQHqoNn5KdlStBULjOUTDQAjMaJou338IGU1zyiL0MnP6qWQv+oQ/Hxzdn2/zRvejG4Mzzfuvg1lW7JyVlpbrr3E5n6B8rKMsfs9/e3ZGkY1jDoINTQioCsRugvUt2GxeRveSi/fm+Kqhn9ZrhVR9gG1QDWWhW/eaq7X+/PLmy95Za7vt8U0wrLCKu/b8s01bJkm97hju3N2vu5cZwYAx2Y80VZqB/KPEqc/u3znbj+TjsrFwbWYZfv4wZrMUY0i1BZHYq3BWCvh+SYo13qXZVQprNW2jibujCWRt4ZeDe10sKeGnmjrKbAhQrUPWJ43xVcNeVlSx9Asy7LX+3NplGdnk+Z6vT/P37vqD2Un6Vb5pi0vfhw6t8j2t2Or3BeYEm0B4DiNJtr2dAGZIm++tQKuL9oqUzq6QAjRVkhs9nnVNkdZe1nmkP12SBC3hrUi9fb01VDeUJ4Cm34StN8x5DfFWw15WcZlZJ5fL9qim3c2a65qmvq2ANUG71b5xi0v1rDXaLv7jj30vVMAAG2MJNru755fv79cW+eCxWjrz0ntom3PrbbWfY72H22dW8PVDJxP6a2hvKHkAnN5I6Wzy0GfrbZN1Qjsa6upflxZ59l9NRfm8kXbbpX3zuXdtn1G2x52bKItAJyScUTbfi4gczO7Fhw02rbpZduwrG6NW7t0SBCjbWC/kfBoG7RxXu/PHf1EO0Rb55vSVI3W0XF+VyUAACAASURBVNb8TWW12jprLs/VFG3bV947V99dQeSF7t5q27bDEgBgSKOItp6D2c5tk3ofx0y+zXvP0fb3l+tdDrfCsorQUzbsDdBq6+yF3FxDdS69g7KvQJ3VOOe9Y3++FL0xz/emNFRDWFZDtDW6rgZGW+dcvmjbsfK+uRo+Dp3T5B52bF9P4tHfRQQAjs8Yom2PF5BldjuldH2JOVY+lpu35b8MaYy0LvoOO8p6lqWu2vnj7zZ3jWiv8Xx0QA0dl1iV0xuVlwo0hoe+lVmWWQFaWS/xTZHXS1yW76eX0pXi7Pp+ra6yZ/NKc3mjbbfK++Zq+qUn3NfWO/1edmz5vrbFluS+YABwXOKPtp5+ezt06Rtcc5/C6B3fnXd5U3rUdAPpw2jutUy0BYDjEn203d8FZIOyMtP28cMx3sx/n44u2vKm9Kv1xZF98/8yOeSTsQEAwaKPtvEyz32PrvXo6KJtxpvSs/32imkiP3y76LNLezwAHCGiLQAAACJBtAUAAEAkiLYAAACIBNEWAAAAkSDaAgAAIBJEWwAAAESCaAsAAIBIEG0BAAAQCaItAAAAIkG0BQAAQCSItgAAAIgE0RYAAACRINoCAAAgEkRbAAAARIJoCwAAgEgQbQEAABAJoi0AAAAiQbQFAABAJIi2AAAAiATRFgAAAJEg2gIAACASRFsAAABEgmgLAACASBBtAQAAEImxRdvfX67fnT/+bjkKAAAAJ2Bk0fb55uzyZt12lOzs8p1/oHOCbkKK8kxzdvnOfvVVNwAAgGMwrmi7vhPbZT2jVM6AaIdF9Y++AqUUo0Pq45ydaAsAACIzpmj7en9++eHLa8tRgjwXqv+VpgkZ2GpxIWV2GwIAAHDSRhRtt48fzu5+tB3l5GyddU5jt6F2CJQhPRwapyHaAgCA6I0n2v64unx39dx2lMlzll8Nr87I2y3aNsbokN4I0mStagIAAHDkRhNte72ALCRHGn9k7aNtSIy2l+VpSAYAAIjbSKJtz/f8ajy5L11GlikBNPDyL89C1eGeDO2sA223AAAgPuOItr1eQJYdqtXWXqinMmqtMqFZ11kHoi0AAIjGKKLt+u6ddJWYZ5RHq1ZbY+A+oq2zfKItAAAYmzFE234uIFMFXrNlT5ntOdp6+uCqfxNtAQBAlOKPttvHD2fX99uWo3bkuZZrf9HWUwf62gIAgDGIPtr2fwFZ28u/jHlbLc6YPXw4fW0BAMAIRR9tAQAAMBZEWwAAAESCaAsAAIBIEG0BAAAQCaItAAAAIkG0BYCj8XzT4SEyOEY9vZXrO/FOPp5RwJiNLdr2fC+wo/Z8c3YZ1xrlWK/De76pbm/X4REnsLmfg/h8c9b+ud84RtJbGfAxN/eN1/tz6XPnGQWM2Mii7fPN2eXNuu0o3frOvJet9j0VXM7eSd+hx1PDbg61XtvHD+q7vPfjxzFH20LHp/e5Ce/XkXy+zGqENb81VN6Y0izzx5U1fXiBplP/mB/E3jav461UZmwZbf2L440GLOOKtn2e2Xm9Pxd/lB/3F83x17CbXtdrffcuzq20k0NE28LQny89XshJxUmqvFh+OUR6OGJAgaZYP+b70Pfm9b2VAVw/e35/uZZ+X3lGASM1pmjr+f7q8NU29KG3u+OvYTd9rlfLKDMWo422Qv8BSZdo6922RNu96nnz7voxkTur0HALBBlRtN0+fpAOTp5RIuvb0Dh/LZxLtc5vvt6fX958yee9vt8W09TfU3qxYd9fQs/II6phN4dbr99frr3r4iwwH359v81+XBn1tLvEqV3xGnqy5pUJXq8mvveroUDhmO2by1H55vcrG/7zpcUL9e3zv5VC5R01tPeclkE/P9GknFIvZu+4oYR56zVtu897SZV3LEtt/vQuq/uO3f/mdb2V/o+5Z98oeBKze1ReVX6iY4TGE21bfy80aNmqtH38oAxXTiG93p/nX9/VH2p9dvo57gkiw9awPjK5D2DHsF51Jc13WSwwq45PxSzqlPo5Suc5ROd6/bgSYquvGh7y+xVQoKOG3rnEyvtrkmXDf76MXphqPjBONzva2FyV12tozrV9/OD7CAjZS8lA1nmGthvKGPV8oyawbvu8h155vcDX+3NpF/Isa5cdu7/NmzW+lc0fIukUQetroIm2GK3RRNvez+a0O/RaXz3VZFU5dWuQcejtfG6rVQQcpIbdHGS9lNn1gCsXmFkNeOpOoo5y7zzCMc99mPRWw0N8v0IKdG8faa6GY3yf0bb/vdfua6sHLO9b6Rhobrp+oq2ny0TbDWWWoE7ZdZ+XhdXWmrLh89V1x+5t82ZZl2jbsG+IKxI0ChijkUTbPXwptDv0utopAwNW3trkPGnboFUEHKSG3RxqvWq/v1xXDXVygWId6kLqM/KOg59j6XIXT281/NzvV0iB7qOyNFdD/9Q+o23/e683yuhvZcgJbqsbw0DR1vd+ya22nfd5kau22q9H99n55n2m0449bLRt2jdKRFsg1Diibb8XkPlnlI8o8o0JwwLW6/15u+zYOgIeqoaH7JDQx3ppR31v9xX/obcYK5UgRFv3lunjii7t/QopsLnBSdVwnXjf0bbfvbchytSdPl2VbN9q262vbbdoK71f8t3udtjnBXJt1Z+R1pSBy2q7Y/cabUPuC9ap1bbvPnVAvEYRbT2tR+0ufFZJh17hHtpiF7SWbYc9RNsjqmE3h18v7Xy0rzdhyFHt7qZFWpV/LTR2asw7C3rfDu39Cugl2dxNMLDy1djW9wQ41N7bdPOv31+u313dCY+bkqJS8b6XrZK73SGhIXu13VD5GvlSb8cOXc79UN68ro68baNt2x27v81brY4cNP2/YJ37RpZlXcJ08VuF+4JhfMYQbXv+sdt4l2+18UMdZV5aW1/mIh56jVkCU6NdQ8910IPUsJsDrpfZrux5i1sdep0XdjSsl3KaNWi9jGK9l8AHrpe/hr5qyJXPhPfrSD5fRjWky88dGUWsfL1TnT/+tnsyOBu5PQU23p6s3YbKrIv0A9/lsGjr3jmdm1fdZ67v1+qGarhWrIcde/fNmwW/lWZnbnnf6Hhf22JLcl8wjE780dbT86mpUxQAuO3h22PYuyk39wHtUffTZaeh77eyY/+HppsYApGKPtrS9R5A3/YU+wa430jJWqPt4wf7znd9iT3a9vpWenY2/374fGO3KANjEH20BYDeVKeh9xRAuzw+pi9mh4Q9tvbFH237eys7PR++6LPLtWUYJ6ItAAAAIkG0BQAAQCSItgAAAIgE0RYAAACRINoCGI1VOklXvRSTLDa7lwMA6B3R9mis5xfT6dUyutvsrv6ZTP4vWfxv6Hr07bDrtUonFS1UrVJzSNti+4h6x8a9XqvUvakCPnpP8+nFXLlhwGaRxLnlAODkxR9t1UwgJIPjOEJJx9f1/GI6fxqiRv2QIuDqn8nknx63/GbxfTL5v+q19zf1gNHWl6P6i7aH/KSYyworuKGGxpRmmVKw7RRthWUAAAYXf7QtbBaJ87h2/MenU4+2kl6j7Sr9v36D8lHZ307qKPkgnxS9MDl0Okk1FMvvsAyTI9rScgsAR4loS7QdSJ/R9r9plH0eCnuMUMcRbVuW3SXa7lp7V7Q9hW8PABif8UbbzSIxz266ejGaJ0w3i2SSLvJ5k8WmmKY+vOnFhh321vOL6TR/3SpHz5flrBpevbTTpsqM9XF3u7yazh/yeWfLl2KaOhzrxe4zNK/+cXYPMHoO5C8tmCozTtL/lrP9J5n8s8jnTf6zKabJw/H/Fom31dZZYD48+c8m+29q1HPzn8To0rD6ZzL5XuwdwnqV8soEr5dvA1on4NWdShlrVCO/yEkcbxTbFG338UnRMqEa3e0Ybze3+sK3sF5SBhU+evZY7SPWVG6+xbjODAAGMd5oWxCOefoRVvlXddSqD19KETu14qxvxeOrI4C+LGfK8O3DrDz0bpdXeait/lBL7tIG7EpYLY7b/02dEVBotd0svivD/7dIyhS4+U+Sh9rqD63kKp5+N2omFphVWbOYRZ1yleaLcM3lW6//pkJs9VWjgb/V1rHP2TGyeruMsnZvte32STF2KXV5RpQNrKF/vZraeR0fPf3zJbTaCgUTbQFgQERbsdnFfQ1NNaY+lhrRtnO2bRVttw8zuwV3/pTl0Xb2sC0y7u1aL3k9dzdQ7VGraPu/RWK3dP6zyvJo+32xUZtU7ZKrFtMq4MoFZnpbrLoIY5Q63Ltem8V3JRCHrVezTtHWfbrfnHjnaNvxk2L3ta3/qWZbZ2UcAxvWq320NYe0irYAgAERbcW7BLlPBPujbaadvm15zGsVbde3Vl+FoGiblc26dveGfWkVbeu+AcorPNrm/rdIqjZXuUCxDnUheRgVAqtj6atUaov1VqNBf9HWKmnnaNvxk+KNonUNNoskJE43rlfraFt/dgpEWwA4FURb8YDtzhKN0VabstVhr3W0dTe+NkZbbcqQdHvIDglSWm0VbdWz/3KBYh2MsVIJQrR1t9p6q9HgmFttO35SGupRPBFBeDBC+1bbpp5CnVttuY4MAI7O6KOtEBvENBEebVu36PgCqD3c6AuoTx8Wbe1eDXshpDr7Uq18sNYn1Zg+MNpqHV7FArPGXgH/TSf/l6b/tEirm/8kwr0afNXI65JKPxl6jLbq2f7y/EJgtO31k9J086/NIpmkqfDkMFcNm9bLn0EdH5Cned5PPSs6sjsvI/P9qiXzAsAw4o+2jbd5Vy8AV0eZF4bXp3TFA7YxS2CufZpbXQv0g6h6TwM1iZq3UKgvIxOjrTHLXnPtKrVOwesn69VbJahx0LyFQn0ZmRRtzdP9Rrh0F5g1d3jNZzRKa1iv/Cq38PWqi3UFzXw+V3p0tKWr+VWItup8xSVe6lyH+qT4b9JQlem+PM5dQ3G96tHWB9L70av7/Fwtty/LWYv72pJtAWA48UdbACdnD51Yd3xog7M8Kbw6kzkA4BCItgCOzJ4eUrHTDUx0zZ1EuLwMAIZBtAVwLKq+DXtq8HTfcqE94QK3jL4IADA4oi0AAAAiQbQFAABAJIi2AAAAiATRFgAAAJEg2gI4VivzqQ3y9VsAAGQZ0TZQ6PM0lXvK7+MS6XaP9eQORKeJnU0p0ypyT/cFAwDEIvpoaxxyO95KveWj4sXJ5YeptivXeYNOMwkQbQ+Nna3HnU1+wkLLDQQAGJXYo21xl8nyEGn8M1hPaWOVTpLFovspVf1BpUYpHPCHxs7WH++jw2i5BQCIxhBt08UiyY+Sm0WSrrr01usnbRRL7h4LlDmtQz/JdnDsbL1pWgB7OwBAMIpou9osknRVhA39QpTq6UeO9jWlL6PZn1Ed5Y4VjsHVgo3R+XCx56RQDSNuaGX6e2G6Kr9ZJHYGa84P2+XVdP6wnF1Mpxez5ct6fjGdXkznT9UExZBpMUE91/R2rZSznl9MZw9b36K6+vcxeXs5+et59dfl5O3l5O3l5M9HZT1fF3+Ww99eJn+/ZlmWZc/p28vJX892OeUEbuxsfe1szXuee4p8C9MJBwDGbBzRNs8ZReao04beiXCzSIyTyfWhUz2Q6qOc50adx10l5ejji6O/q4XMUw19QmmJ5kCx8sK0DSlhu7zKM2v1R7a+rWLrdnk1rwLs+nY6vSj/+TRXkm62fZjVo2RG7HIFRIc82uqvMqFquVYZ9br400jAWfb9bvL2Mv3uWxQ7W087W8Ce556EaAsAiD3alof4zSJJkqS6KqZoVjMOsPXh0jz2Kv+2jqmO47Tr2K+23+mLttvV1OQhVCPT4obYcmcMlStfxDLfRnDYLq/y1ta6IVaJtrqnuZJf1WbaqpC9KKNtEWe/302qFtn87yrCKv9c/XU5eXu3Kv64Xvybbf6+zv/wYGfraWfrHG0BABhLtK2PplraEC6OsYKIkQAszWlDH6QtQEwbvmqU/0wWG193S//5ZrXyxZbaLJI0TctSm8JDQ7TdPsymdYeEqdo0u32YTa+W2yzLXpYzpQW3d3m0NfLrX89ZlqdVs9U2n3Lz9/Xk7d0q75nw9jL5+7Uc4sPO1tPORrQFAHQ2mmhbK3NHx4a0kAtYWh3mOzekVXFDqpK7GkLl1Y6iqzRZbOp8JvNF2+3DTO11oLfaZnnD7fxJbuV1rk7XDgmuaGu22qq+303eXi/+vpv8+bj6+3ry5+PiL2FKvYLsbL4h2sr7draufW0BAIg82rradvRMIXRkVM6/lhf/uLs/OlnHXffZWnfPQ/WfnmrU4xOpPo3dH82pkzStzqOnacDF/Y3RVuuBYHSoXd9Op7fz+T6bbDNvtC0bZR3dcPOLxv68Tv5+rXvrGheWmdjZ+tvZmpKrML6oN5kXAEZs1NE2Mxq4rAN51TJoNCppl7pP9HDgaixzHYjr474nbfirUY9ubLULqLz2gIG8iMaI4O+QkF9bVt4e4Wk5M64Ve1nOLqZFt4S98UXbzL6STLtJQnHdWDGN//YI7Gy97mxKznZvaffOSbYFgNGLPNoCOE1yuPU16XZ8AhwAIBpEWwBHSe/DUfB30VilE27+BQDjRrQFcKScnSKE5EpfBABAlhFtAQAAEA2iLQAAACJBtAUAAEAkiLYAAACIBNEWAAAAkRhbtP395frd+ePvlqMAAABwAkYWbZ9vzi5v1m1HuZxdvnP+7R8IAACA/RlXtF3fie2ynlGGPLPa/3VOlv9hvNpWGwAAACHGFG1f788vP3x5bTlKEN5qa4wl2gIAAOzJiKLt9vHD2d2PtqMMzibY8H/SagsAALA/44m2P64u3109tx3lpibUxtZZaQIAAAD0azTRtu8LyOx064m2tNoCAAAcwEiibW/3/HLGWSnaGsMJtQAAAHs1jmjb6wVkmdBAazfTGv+k1RYAAGCvRhFt13fvpKvEPKOcnCE1pEOCPRwAAAD9GkO07fMCskzoYGAHVqmvAtEWAABgT+KPttvHD2fX99uWo/ycDbGeXgp0SAAAADiA6KNtbxeQ5fz9EDzdbe1pAAAA0K/ooy0AAADGgmgLAACASBBtAQAAEAmiLQAAACJBtAUAAEAkiLbozyqdpKuhKzEiq3SSLDZD1wIAgCNCtB3GKp1IKdAzqv1kq3QyOVD8WaX2kt5PsjdJ9ivLPifZm0n2zZwlezPJ/ljsvWoN1ehmPb+YTq+WHW6L3J/NIgnaWQAAGAui7TBaRNtVOqkoww8dbRuW5wq2eaZMsyzLvqVtou2qvwAaUo1upGi7nl9M50+9LCJE4C8hAADGgWg7jMBoq7fKrVIl3R460niX5w62eStph0zZd7TtWI1uDhxtabkFAEBBtB1GULS1Q8tmkZQR8piirTiuypS/FkWXgLBl7SvatqtGN4eOtjTcAgBQiz3abpdX0/nDcnYxnV7Mli/r+cV0qiWPYsi0mKCea3q7VspZzy+ms4eQfpVq/wGjIVMdNZF7HVSjHJGlbh7NR24WiV2cUZivGmYiUsor59MGOYvsEK1W2ZtJ8XqvzPlrUQ+vXlqPBWXGPK1mWZZtsj8m2ed83iT7VU7zrVWVwin7jLqTvOS7mf7SeiyoO9u8nLNpF9WLdYZm9xuQv3FcZwYAGJUxRNvpxWz5Uv2RrW+rRLJdXlUJI1vfKoHjaa4k3Wz7MFOyiMdmkRgJ0921wNProB6lNNGqC1CibV2+eFba6CqgT+dYcvuWWWc9Q73Xo225LHcwzYNvNbxqi82j7Zsk+1X9IZXcJ2VH0ga7W21fljNluLJH+XfRoDZg9ztAtAUAjNAYou3sYas2xAqJJI+zVX5Vm2mrQlpS0qDr2rCmUc3RVijRrENdiFWkMldDQj2CaPs5cbTgfsvKVttN8Ude4JFF2+3DzG7BnT9lTbvoen4h7K6KXd4BAACiMvJou32Y6WeQ66bZOou8LGdKC66fdfZe6DXr6VCrRVtXhwR3bwXhSi59sNlVQW34DbgFwsDR9r3VV+F0ou361uqrEBRts7JZ1+7eUCPaAgBQGHO03T7M1F4HeqttVmUUsZXXslkkWrzcsdXWkW2VoNqp1bbpWrBOrba7XMbUNtq60+qJRFv3XhR+YmG7vHKnW64jAwCgMPpoq/VAMDrUrm+n09v53Nlkm7d/6lHQcasu7V5dxdRly27gKL3Eaol6nBFzqbevrc5M5o6xvWdbdwBVEqrK6GtrTN852rreyhC+AGoP1/vaGtMH9pmxejXUK+DY/MXOROYFAIzJmKOtdqr3YrZ8Ws6Ma8Xyi9OdZ4H1q7hKan+EZLFaJM77FiSLzSZ0lHg/A6PrQ3hbrNlnQi7USHv6ylk3XWiTDfP7y2qvVJtAvVWC2r/WvIWCchlZ91bbltn2aW51LXDtNnYXAvMWCvVlZOIuaszi2hXl3xxkWwDA+MQebUfvUOeq24bbo3LAxxH3zvcG59mWaAsAGBGibXxWqXR3rz0v9kRj1AkHQP/7e8qJHQCAboi2MVI6MRwysRldKU5B1362x2GVSlWnLwIAYKSItgAAAIgE0RYAAACRINoCAAAgEkRbAAAARIJoi6Gt0pFc7iRf9QUAAPpBtD1xp36DJ9f9cN9PsjdJ9ivLPifC48c6UZ8ToT4Gol++yh/yXmwAAIwS0fY4uG6877xRrBkFe4u2+nOBhSr1zf2gh/flY8byMPqtjyWJD+ntW0PlD/UIDQAAxoloexyciccR/PaXjFbpZJIkSb28/Ycw6Qlmn5P+o+231HyW7540VZ6WWwAA9ohoexzcOdLKfnuMm3nRSr/XvUdbcQFVOvy1KE7u764qc9+aK0/DLQAAexN7tN0ur6bzh+XsYjq9mC1f1vOL6fRiOn+qJiiGTIsJ6rmmt2ulnPX8Yjp72DYvsHgMlPNZYMpDwqox+vSFKs4a2VYLRf5HjknLslpJyzKL/9fZ1khgaoFVIZtFMkkX+Soki00xjTCXUcsOCW9VhMX3ZZfZ9yt9bDm8TrHqQOX1LcsyqynX+Gfeh8GYxbes4NVwrnm+J5xwt2kAAI7AGKLt9GK2fKn+yNa3VWzdLq/mVYBd306nF+U/n+ZK0s22D7N6lI8c1/Tz0NZZaWlGLduKvRaMgeKyhGmTxaYet1kUnRLUiTeLpJ5P6QNcxbE6l9Wz+VfZmbMblIHy8ybL9O6zRldau43W2Wrri7YrsS9E47KauFedaAsAwO7GEG1nD1u1IVaJtrqnuZJf1WbaqpBGziu/ssyRZhxtos5MrGRbudOCPlRe1maR1H8YAVadSMu67jrV6TVZbNTgqi3Ms8qdo+3nap5N9kf5z8+JftMDK5h2i7bvXevfuKwmXVYdAACEGHm03T7MpnWHhKnaNLt9mE2vltssy16WM6UFt4nSw8DoSmAJuh1BlW2FSezBnmUVd1bdLJI0TctSrUbavFOCVrDVb6I52jascudo+8015r3c6yDXOtpmRXS2bxbWuKwmRFsAAPZlzNF2+zBTex3orbZZ3nA7f5JbeRtsFkmdbps6lnrGF9nW12XBjrZCWXmzbd69YJUWHQnszgqrNL+iTO1Z4Ozy2xRtO66yOIsv2jpbWCtdom1lk/2hpNvGZTXhOjIAAPZl9NFW64FgdKhd306nt/O5s8k2b5P0tr1pjXMN93zyjS5uy+XpseDta2tOnaRpUmbPNE2d3R02i0RZol6eegNcX7RtvM1V+4QX3P/V5oy26lzFAx2EXrNqJ4Rdb5ErrHfRME7mBQBgB2OOtuVFZuXtEZ6WM+NasZfl7GJadEsw2DcDyKzT9kbwNU/qy/M6bmZrTe84329cpOUalQ9X7oGg/cO6tYHrPg7JYlU19XqjbeMqS/e1FXl7tRo3NAi5jCxTexek2a9FPY1RmvH0Mv+yvOTAT7YFAGBnsUdbHLXW4fbk+Zqqtd8dAACgA6ItBiXeUyJG/i4avT0zGQCA8SLaYmD1lWyxq+5GYaEvAgAA/SDaAgAAIBJEWwAAAESCaAsAAIBIEG0BAAAQCaItAAAAIkG0BQAAQCSIth7f7yZvL9PvQ1cDAAAAQYi2stVfl0RbAACA00G0lRFtAQAATkr80fZ18efl5O3dqvjjcvL2evGvMbZ4JX+/2gOrV5Fx/31M3l5O/nwsnir1/W7y9nLy13PDsvK5/nrO4/JELUG2XV5N5w/L2cV0ejFbvqznF9PpxXT+VE1QDJkWE9RzTW/XSjnr+cV09rCtB+QPv+KZrgAAIDKjibbpX0pOLWKlI8Imf7/uHm0dy8rncizLZ7u8yjNr9Ue2vq1i63Z5Na8C7Pp2Or0o//k0V5Jutn2Y1aNyRFsAABClsUTbqgH1Oa3+zlOpEVKVxlR3h4TmaOtaVhltizirzSXaLq/y1ta6IVaJtrqnuZJf1WbaqhAAAIDYjSba2k2km7+v7abZXqKtoznWN5eoIdpuH2bTukPCVG2a3T7MplfLbZZlL8uZ0oILAAAQs7FEW7V/bclqpjUERNu8XdaItq5l9R5ttw8ztdeB3mqb5Q238ye5lRcAACA+Y462VTAV+r+u/tJGaX1tjddA0VbrgWB0qF3fTqe387mzyTbvaztJV/7lAwAAnJZRR9vMvmJM70ugZd+6+TYPpnk/2u/FrQ8alrWHDgn5tWXl7RGeljPjWrGX5exiWnRLMJFtAQBAjOKPtnDJsy3RFgAARIVoO0qrlJt/AQCA+BBtx4a+CAAAIFpEWwAAAESCaAsAAIBIEG0BAAAQCaItAAAAIkG0BQAAQCSItgAAAIgE0RYAAACRINoCAAAgEkRbAAAARIJoCwAAgEgQbQEAABAJoi0AAAAiQbQFAABAJIi2AAAAiATRFgAAAJEg2gIAACASRFsAAABEgmgLAACASBBtAQAAEAmiLQAAACJBtAUAAEAkiLYAAACIBNEWAAAAkSDaAgAAIBJDRdtVOplMJpNksRmoAgAAAIjNoK22m0UymaSrIasAAACAaAzbIWGzSGi4BQAAQD+ItgAAAIgEQ3LQDgAAAGJJREFU0RYAAACRGPgOCauUS8kAAADQjyO4+ddmkUy4mgwAAAC7Gjja0iMBAAAAfaGvLQAAACJBtAUAAEAkiLYAAACIBNEWAAAAkeBBuwAAAIjEUNF2lU4mE+5pCwAAgP78f5jPKz3HjHG0AAAAAElFTkSuQmCC" alt="" />
3.JSP授权(页面上根据权限设置菜单显示与否)
Jsp页面添加:
<%@ tagliburi="http://shiro.apache.org/tags" prefix="shiro" %>
标签名称 |
标签条件(均是显示标签内容) |
<shiro:authenticated> |
登录之后 |
<shiro:notAuthenticated> |
不在登录状态时 |
<shiro:guest> |
用户在没有RememberMe时 |
<shiro:user> |
用户在RememberMe时 |
<shiro:hasAnyRoles name="abc,123" > |
在有abc或者123角色时 |
<shiro:hasRole name="abc"> |
拥有角色abc |
<shiro:lacksRole name="abc"> |
没有角色abc |
<shiro:hasPermission name="abc"> |
拥有权限资源abc |
<shiro:lacksPermission name="abc"> |
没有abc权限资源 |
<shiro:principal> |
显示用户身份名称 |
<shiro:principal property="username"/> 显示用户身份中的属性值
aaarticlea/png;base64,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" alt="" />
总结:
当调用controller的一个方法,由于该 方法加了@RequiresPermissions("item:query") ,shiro调用realm获取数据库中的权限信息,看"item:query"是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。
当展示一个jsp页面时,页面中如果遇到<shiro:hasPermission name="item:update">,shiro调用realm获取数据库中的权限信息,看item:update是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。
还有一种情况是有时候连接是在Ajax请求之后拼接到页面的,有时候也需要根据权限进行判断,项目中也遇到这种情况:
思路:在页面中定义一个JS全局变量,在shiro权限标签里面,如果有权限修改全局变量的值,在JS中根据全局变量的值判断是否有权限
(1)页面定义全局变量
<script>
var hasOperatingDepart=false;
<script>
(2)页面用shiro标签判断是否有权限:(有权限会执行JS脚本改变全局变量的值)
<shiro:hasPermission name="department:operating">
<script>
hasOperatingDepart = true;
</script>
</shiro:hasPermission>
(3)JS拼接的时候根据全局变量判断是否有权限:
// 有删除修改权限就显示连接
if (hasOperatingDepart) {
str += '<a onclick="updateDepartment(this)" class="el_delButton">修改</a> ';
} else {
str += "-";
}
有时候我们需要在代码中判断用户是否有某些权限;
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
boolean permitted = currentUser.isPermitted("exammanager:factory");// 判断是否有全厂管理的权限,有就不添加部门ID,没有就设为当前Session中的部门ID
String departmentId = permitted ? null : departmentIdSession;
有时候我们需要在代码中判断用户是否有某些角色:
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
boolean hasRole = currentUser.hasRole("教研室");
boolean hasRole2 = currentUser.hasRole("院长")
上面获取的主体的权限码是我们在授权的时候塞进去的,当然我们也可以将角色码也塞进去:
package cn.xm.jwxt.shiro; import cn.xm.jwxt.bean.system.Permission;
import cn.xm.jwxt.bean.system.User;
import cn.xm.jwxt.service.system.UserService;
import cn.xm.jwxt.utils.ValidateCheck;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired; import java.util.HashSet;
import java.util.List;
import java.util.Set; /**
* @Author: qlq
* @Description 自定义realm。根据上面传下来的token去数据库查信息,查到返回一个SimpleAuthenticationInfo,查不到返回null(用于shiro认证)
* @Date: 21:56 2018/5/6
*/
public class CustomRealm extends AuthorizingRealm { @Autowired
private UserService userService; // 设置realm的名称
@Override
public void setName(String name) {
super.setName("customRealm");
} // realm的认证方法,从数据库查询用户信息
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String userCode=(String)token.getPrincipal();//获取token的主身份(登录的username
User user = null;
try {
user = userService.getUserByUserCode(userCode);
} catch (Exception e) {
e.printStackTrace();
}
AuthenticationInfo authenticationInfo=new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
return authenticationInfo;
}
// 用于授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//0.下面方法principals.getPrimaryPrincipal()获取的是在上面认证的时候装进AuthenticationInfo的对象
String userId=((User)(principals.getPrimaryPrincipal())).getUserid();
SimpleAuthorizationInfo simpleAuthorizationInfo=null;
try {
simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//1.设置所有的权限(注意权限是以字符串的形式保存的权限码)
List<Permission> permissions1 = userService.selectPermissionsByUserId(userId);//获取所有权限码
Set<String> permissions = new HashSet<>();
for(Permission permission:permissions1){
if(ValidateCheck.isNotNull(permission.getPermissioncode())){
permissions.add(permission.getPermissioncode());
}
}
if (permissions != null && permissions.size()>0) {
simpleAuthorizationInfo.setStringPermissions(permissions);
}
//2.设置角色,角色也是以字符串的形式表示(这里存的是角色名字)
Set<String> userRoleNames = userService.getUserRoleNameByUserId(userId);
if(userRoleNames != null && userRoleNames.size()>0){
simpleAuthorizationInfo.setRoles(userRoleNames);
}
} catch (Exception e) {
e.printStackTrace();
}
return simpleAuthorizationInfo;
} }
获取用户信息
@RequestMapping("/first.action")
public String first(Model model)throws Exception{ //从shiro的session中取activeUser
Subject subject = SecurityUtils.getSubject();
//取身份信息
ActiveUser activeUser = (ActiveUser) subject.getPrincipal();
//通过model传到页面
model.addAttribute("activeUser", activeUser); return "/first";
}
Shiro的三种授权(十二)的更多相关文章
- MVC后台获取数据和插入数据的三种方式【二】
MVC模式下,从前端获取数据返回后台,总共有三种形式.下面的代码示例将演示如何将数据返回到后端. 一.首先我们看看表单代码,注意input标签中name的值. <html> <hea ...
- 六十八、SAP中内表插入的三种方法之二,COLLECT的使用,用于计算数字字段之和
一.使用COLLECT时,如果关键字没有,那么插入,如果有则求所有关键字列的和,代码如下 二.sy-index在循环中,每次循环从1开始递增 三.查看T_DATA数据 四.如下 五.循环时候,我们查看 ...
- shiro框架 4种授权方式 说明
1. shiro的配置文件(applicationContext-shiro.xml)中使用filterChain过滤url的方式 详细配置看注释 <?xml version="1.0 ...
- WebApi 的三种寄宿方式 (二) - 宿主和控制器不在一个程序集
新建一个类库: SelfHost: 方法一: 1.添加对MyControllers类库的引用. 2.在控制台代码中加入一行代码: 当然,可以添加多个程序集.(记得引用) var config = ne ...
- Json 序列化以及反序列化的三种方式(二)
1.什么是JSON? Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的 2.Json支持下 ...
- Shiro身份验证及授权(二)
一.Shiro 身份验证 身份验证的步骤: 收集用户身份 / 凭证,即如用户名 / 密码: 调用 Subject.login 进行登录,如果失败将得到相应的 AuthenticationExcepti ...
- Shiro第三篇【授权、自定义reaml授权】
Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: Shiro支持的授权方式 Shiro支持的授权方式有三 ...
- 第三章 授权——《跟我学Shiro》
转发地址:https://www.iteye.com/blog/jinnianshilongnian-2020017 目录贴:跟我学Shiro目录贴 授权,也叫访问控制,即在应用中控制谁能访问哪些资源 ...
- 32、shiro框架入门3.授权
一. 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission ...
随机推荐
- MT【34】正余弦的正整数幂次快速表示成正余弦的线性组合
问题:如何快速把$cos^4xsin^3x$表示成正弦,余弦的线性组合? 分析:利用牛顿二项式展开以下表达式: 再利用欧拉公式$e^{i\theta}=cos\theta+isin\theta$ 比如 ...
- 【题解】 bzoj3036: 绿豆蛙的归宿 (期望dp)
题面戳我 Solution 反向建图跑拓扑排序,顺便处理\(dp\) 假设某条边是\(u \rightarrow v (dis)\) ,那么转移方程就是\(dp[v]+=(dp[u]+dis)/in[ ...
- 金三银四:蚂蚁金服JAVA开发面试题及答案之一面(持续更新
一面 1.自我介绍.自己做的项目和技术领域 开放题 2.项目中的监控:那个监控指标常见的有哪些? 答:CPU.内存.IO 等等.建议下载个nmon工具,里面有各个指标. 数据库:Mysql(缓存命中. ...
- Deep Learning(深度学习)学习笔记整理系列 一
声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部 ...
- CDQZ多校集训记
20171218 DAY0 初相逢 今天的阳光很好,确实好极了.下午开始时,mercer说门外站了一堆人,我看都不用看就知道是衡水的.衡水人,怎么说呢,觉得还是挺不一样的.不知道像凡哥和超哥这种奇异的 ...
- (转)搭建Maven私服(使用Nexus)
搭建私服可以做什么? 1.如果公司开发组的开发环境全部内网,这时如何连接到在互联网上的Maven中央仓库呢? 2.如果公司经常开发一些公共的组件,如何共享给各个开发组,使用拷贝方式吗?如果这样,公共库 ...
- JAVA中String.format()的使用
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.format()方法有两种重载形式:1.format(String format, Object... args) 新 ...
- 跟我一起使用electron搭建一个文件浏览器应用吧(二)
这个文件浏览器应用可以具备以下两种功能噢- This file browser application can have the following two functions. 一:用户浏览文件夹和 ...
- java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers及解决方案
1. 问题 最近在项目中修bug的时候,碰到这样一个错误: Caused by: java.sql.SQLException:Prepared or callable statement has mo ...
- poj 3061(二分 or 尺取法)
传送门:Problem 3061 https://www.cnblogs.com/violet-acmer/p/9793209.html 马上就要去上课了,先献上二分AC代码,其余的有空再补 题意: ...