1.1     什么是shiro

shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。

spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。

shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。

使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本。

1.2     shiro架构

subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。

securityManager:安全管理器,主体进行认证和授权都 是通过securityManager进行。

authenticator:认证器,主体进行认证最终通过authenticator进行的。

authorizer:授权器,主体进行授权最终通过authorizer进行的。

sessionManager:web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。

SessionDao:  通过SessionDao管理session数据,针对个性化的session数据存储需要使用sessionDao。

cache Manager:缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。

realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据。

注意:在realm中存储授权和认证的逻辑。

cryptography:密码管理,提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。

比如 md5散列算法。

1.3入门程序

流程:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO0AAAGiCAIAAACEVtbVAAAZ0klEQVR4nO2d38vc1pnHz6Uv9g8w7EV81ZtppwsTFjZhe7MXoVSFtiLEaLsuFArGkyWpM77YLo4wbrHi/DBoaRzqxGjXs/Xu5q2LQhKwDR5mwUnwxUAK6xIogYmhmBRigi/ehFxkLyQdHR0dHZ3RO8/RzJnvlw9mXs2RdHT00ZlHmjd52dcIsv1h12/ffeSJ0wBsI6d//Xbu8YUrt5558fezxRKA7eLi3gf+ydfhMdhu4DFwAXgMXAAeAxeAx8AF4DFwAXgMXAAeAxeAx8AF4DFwAXgMXAAeAxeAx8AF4DFwAXgMXAAeAxfYOI8ZY5ofV1oXrJ36CG/ImG+rx+Jy/npDxnR7YQ1RDrWmmX22wOMDj2niZYuG4XSReH6y1g4nHmNe3NpsPh5mnQiipreG4bSP0W4SUemlcvybGttkgzyuj6n+U6zeRjWa8/GQDSbz2WI5S8MBY2zNHleJA43Tkc9YXXoLvTIY+W4Lm06TfTbIY2mkzAdX+27isdE4FX6kNCbydXPzdBKOJyNp3o38wPOLK63vMdcvkaaYto9Bq2yux8ol+vFVjWn2qV3/NC8mwspcyD/9GfMDjzGWXQN5y2wj8/GQeXHisaJQKa6T6WRU3X8QLSrrTidhlIaD2nUVVTwW+5DkbRjz4nx50bLeTDgicbl8mFL/TT3WL++dzfJYeVnXPV7t6ucnsjIRJl7+Y3ZexRfLWRwwlp3swrk0HLAgksvc7MfC4zTJt1CVdToJCtHDKKsuuHlxOE6XFY/jIO9nHLDKHkfjlC+sN1uKlbqwC+kw5TJddeUv+WuN30wVeFzxeNZcXdSdNoRPltmZludOP5ml4UC+06p7XNVdaiO8NZ2MyvnPzzebeTyLg0L9/K1IWVeUF4Owx7IbtWbiW4XlisOU+68e1dbxN5/C7bBBHivnAM2wdpgbIp8VH/EjWR0+w5WYeDwfDxUel+sKd365x/zWMw29yXym8rjwr8Xjpmb8KlIcptZj/Th3G3M7bJDHylGThqlpTJs3It3Y5XoJ82XRpvyAlhvPFh08Xk4nIzYMvKGoXeZx5l8wLn6seJyGA5ZbrpuPFc0UFZTiMNvmY+VZWHHMe2CjPa4v7+Kx+KiLT7ppOChrjIDrIt4zjePylGePzHjBauJxtmtxOox83jLxWLkvsWIuzdN6rGrGS2GBhsOseyxNqJqzwE8E5mMd+uFY/TMufyBQRJhx4yBbJKhWfGNSTGllVT3JBeKbqvkt/FhOh4GouLQiv7kU9yjMqaPsQYeX72I0ToUvdGrNInFTwo6kw5T636SgcklTs34Nnm21x5szgs3MxxOb324kY7EUTsPBAZ6Umwwsq30e9ng6tsZjcT5g1Vm5Kf0eiP67vbUj3Szqv5HpfBbq50I6C32N9sZ57AD5Z7ftr5qFosjoVz6cAh4DF4DHwAXgMXABeAxcAB4DF4DHwAXgMXABeAxcAB4DF4DHwAXgMXABeAxcAB4DF4DHwAXgMXABeAxcAB4DF4DHwAUqHl+/ffeRJ04DsI2c/vXbucdfI5R5/NjL9+4/6LsX7gce0wYe2wk8pg08thN4TBt4bCfwmDbw2E7gMW3gsZ3AY9o8dery+x9+3Hcv3A88pg08thN4TBt4bCfwmDbw2E7gMW3gsZ3AY9rAYzuBx7SBx3YCj2kDj+0EHtMGHtsJPKYNPLYTeEwbeGwn8Jg28NhO4DFt4LGdwGPaPPfStTdvLPruhfuBx7SBx3YCj2kDj+0EHtMGHtsJPKYNPLYTeEySN28sLly5deHKre+eePVnZ36bvV788ZO+++Vs4DFJLly5Vf+f3/zpk7/03S9nA49Jcu/+A0nix4+93HenXA48psoPnvmN6HF0+UbfPXI58Jgqb1x7T/QYxTFp4DFVPv3sIZf40aMv9N0dxwOPCfPUqcuZx7+I3+q7L44HHhNm+vadzGP8qhB14DFhPn+4/43vn/mW/6svvvyq7744HnhMm2P/+h/PvXSt7164H3hMm7dmf7h++27fvXA/7POH+9/80S97/0MPAHTg7378Uu7xvfsP/jZ4sfe/vQNABx554jQ8BlsPPAYuAI+BC8Bj4ALwGLgAPAYuAI+BC8Bj4ALwGLjADnqceIwxxtgwnC4Sz0+0LUfjVLG6F6+lG/WNG3W+de/TyWgwmWf/9j3altg1j+fjIcvPbhoOGGONHme6d1CtRhzUzJuPh2vaeI3pZMQPKvLZjqi8ax5Ls2CH+XhlIl85g87HQwKP40C6Mhv27hq75nE2EQZRZaEw9WaTdN4g8dhoHGdL+MRWlTtvL87r2S7yhdPJiJVljNST6hWVt1NtvNyFuPesxsh3N5jMs13L1qbhQN61g+yax4IclbMr+JGGg9LjolkcMDYap1I9kHj5RrhAgklxwBgbTBKFW/kqopH56+lkJFxF+YqRn0ks7p1fLaNxmu0riMqei6znU2XD2T2PF8tZrgtj5T1Tk8fcAF5YS85V50vF5KeaI/PlxcbjQLioCn1FKcsGcpfyLWeNK9tp7YBT7KjHGZFfLSF0HvN7porH8l2UwqR2j6eTkbAWv2DKFYVbN3EWh8clu+axdGPHpTSaj714Kc/H5dYSz0/yz/fKHs3m43ItyU6pBILHanbPY/H5a3niy5Md+Zk7QSR6rPxkT8MB41NmUJatXO40HMcGHmeFeLaWeBWppWz2GPXxDnnsJ4WplQcXZcU8KW1QPW2oahEHrPI0Yyk8ecjXync3DKeZ5eLC6iVR7ZLw3KMo5YVrTNwC/2bnn3+M5xW74fHBsTa9JWOx+E7Dge5Rd0GttMDzY6Ak8RSf3etH+irOXEd8nwePtRQf/bamN6E+WXWncYDfr+i/TwCsCjwGLgCPgQvAYx2MsfWuonzXfCFoAh7rEGVitZisZfJuU3u+vL5rfQd2EHisQ/JY+VaTZE3OdfDYpPGOA4/V1C2kmw5X2hQ8VgKPdZjMx+ZLmi4AeHxw4LEOZlwfm9cGhkuaqhF4rAQe6+AVhUkzw3e71cfKcrz38dkc4LEOTXFsMiWb3KhpLhXMx+bAYzWaOU9jkqaebloOj9cCPNbRwaTWUkRqAI/XAjzWoa9QTdZSvquUsqksUXoPJOCxDrr5WP+aL6nvFB4rgcc6lJ/+msJX8nKl5xj1JagrzIHHasTioW6n9K5G2aZ3De8C63uU9g4y4DFwAXgMXAAeAxeAx8AF4DFwAXgMXAAeAxeAx8AF4DFwgYrHf/PkuYt7HwAK/u2/3+u9Dw5Tevz5w/1//Jd/90++Dih4/J9e+fufvNJ7N1zlp+F/5h5/jVDm1f/63+jyjb574X7gMW3evLF47qVrfffC/cBj2sBjO4HHtIHHdgKPafP+hx8/depy371wP/CYNvDYTuAxbeCxncBj2ty7/+DxYy/33Qv3A49pA4/tBB7TBh7bCTwmD/8dAIQu8Jg88NhC4DF54LGFwGPyPHr0hU8/e9h3LxwPPCbP48devnf/Qd+9cDzwmDzw2ELgMXl+8MxvFn/8pO9eOB54TJ6nTl1+/8OP++6F44HH5IHHFgKPyfP0uf95a/aHvnvheOAxeZ576dqbNxZ998LxwGPywGMLgcfkOfPau29ce6/vXjgeeEyeC1duXbhyq+9eOB54TB54bCHwmDxvXHvvzGvv9t0LxwOPqXL99t2nTl1+6tTlb/7ol488cTrjF/FbfffLzcBjqnz62UOuL+f67bt998vNwGPC/OzMb0WJv/H9M198+VXfnXIz8Jgw12/fFT3G/wCALvCYMF98+dWjR1/gHuMpMl3gMW3OvPYu9/hPn/yl7+44G3hMm//7058zifFf/5MGHpPnuydexRM36sBj8kzfvoMnbtSBx+T5/OH+t/xf4YkbaXKP791/kP0aAKDgp89Pe++Dw9y7/yD3+Nnzez88+cYzL/4egO3ihyffePb8Xunx2Us3e/+zfgCsytlLN+Ex2HrgMXABeAxcAB4DF4DHwAXgMXABeAxcAB4DF9gKjxOPMcYYG4bTReL5ydo37sWtzebjYdaJIGp6axhOex6l0TglOvzldDIaTObZv/0dYyOb7/F8PGT52KXhgDG2Zo+rxIHmpEY+Y/WzbqFXZqPEunhsxHQy4gcY+WwDVd58j6VpZu3zcYXI101O00k4noykeTfyA28jTu18PKTxOA6kq1Q/Sr2w+R5nM03907yYCCtzIf/0Z8wPPFZMUXnLbCPz8ZB5ceLxQqW4TqaTEaskiBaVdaeTMErDQe26qk5RYh+SvA1jXpwvL1rWmwlHJC6XD1PqvzhQ1Y7lWxEWKrYvThON/VR8BPVcRMlsvsfC6FfGLvHyH/lACyMeB4xlJ7s4SWk4YEEkl7mVj+NpmuRbqMo6nQSF6GGUVRfcvDgcp9WP2jjI+xkHrLLH0TjlC+vNlmKpKuxCOkx9mS4aKV6cTdsXD7+hn/m4SfvqVovvuMcLfj7K8lSeO/1ENUnUPV7WJhjxlJRvCRXhfOznm808nsVBee79cNpUMpYXg7DHuha8mfhWYbniMJUTZN754kD4RZIfIL845e03HX7ZuLIpcV+bVVpsjccZkc8/4ms3zooRN/FYnMbEt4p1hTu/3GN+65mG3mQ+U3lc+NficVMzfhWpng+0ezytFPH8RrnhKlUePjxeN9KNXa6XeAedtyk/oOXGVYEMPc5sCLyhqF3mcf5hPS5+rHichgOWW66bjxXNFBWU4jAN5+NyKKS9SxUaPLZE9QEnH9Y0HJQ1RlBWeMI90zguhzt7ZMYLVhOPs12L02HkV26JxEdR/HVpntZjVTNeCgs0HGaLx2L3ygtYtf1Wj1Efr4n8gUDlGUJGHGSLBNX4TTqT6ktvkp8Pvqma38KP5XQYiOdYWpHfXIp7FOa8Ufagw/P5/ZPwhU6tWSRuStiRdJhS//MODMNT5V64iNKIKbYvHn6k7CeeV2w/8/HE5rcbyVgshdNwsO5vLjtuv1Za4PnxVqH9bm/tSDeLa3flINvH93lbSf4Ja/urZqEoMvudB6vbjwP8fgUAtMBj4ALwGLgAPG6BMab5Ud/YvI35QqAEHrdg7rH4FqtFv5GmzfLl9Q3WN7vLwOMWDD1eSakOHnfe144AjxuRpj3NXCjOmp33RdR4R4DHLTTNx91myqZ6AB4fEHjcgrnH5rWsiccUs77DwOMWJHuaZGq66zJcaFIfK6+T3sdnQ4DHLYi6SK/FNrNVKg3lHN/aEvOxBnjciHLOM6krVl0Ijw8OPG6BzuOmiqVpdXisAR630FQ/HNBjTX1SX11fmoMZPG5F77HeQpOFrR7X9YXHdeBxC/pCopvHmnebyhh9TwA8bkS8z1vpuVh99dZ19ctZc3ofpQ0BHgMXgMfABeAxcAF4DFwAHgMXgMfABeAxcAF4DFwAHgMXgMfABSoe//z87x479sr3nn4NUPDtf/hJ731wlceOvfLz87/LPf70s4fvf/gxIIIx1nsfHObTzx7mHiOkYQzjTBuMr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+VNnf358VYYzx1/v7+313zcHAY8IcPnxY+uPmhw4dgscUgceEOX78uOTx0aNH++6Um4HHhMkqCjFXr17tu1NuBh7TRiwtUFTQBR7TRiwtUFTQBR7TRiwtUFTQBR6TJystUFSQBh6TJystUFSQBh6TJystUFSQBh7byJEjR1BUkCb3eHbnI//k64CI7zx5qvc+OMzszke5x8+e3ztxbu/i3gcAbBcnzu09e36v9PjspZuzxRKA7eLspZvwGGw98Bi4ADwGLgCPgQvAY+AC8Bi4ADwGLgCPgQvA4+VskXiMebGdtei2s9PA4+UsDhhjzE8MG3vxcraYj4eMHcS/fDvW13UUeLyM/CCKAzYMp0aNubvz8bC7x8J2rK7rKjvvcRoO/GSWhgM2Gqd8eeIxxrIlaThgjLEgWiynk1H+HycNw2nucT4xDybzcoNZm3yCz8qGSrPqdhKvsuu8ZbEF6UdpXd7VorfFFrw48co27rPrHk8nI14nlC4uljNRrzQcZB6niTAHZ4aNxulyVk7niZe/qFheNpO3I2ykXGs5W+TVjucXW1asW+nkdDJiLIhK74Oo77G1yY57PB8P8/M9nYyqs5fC42otIbzmovPJsjqhSs2q26nuqGkGLT8xqq6X7fn94oEKni1ltz3mNQCrz2EdPa5O6upmte0UO2oo04vLQ/a4eu3xjxR4vGMeTyeBVBMLp7/rfFw+90g8o/m46rFUD6ThIKuqm+bjsv1crFXg8e54zGvZnMgXn76VNkQ+n61bPM60KybLQNau1eOsuuV9SENvWFwYSo+zm7yyQX3ju8LOelzcD3FpsqfIwj0+L3a9CVekcHoYjn1+A1c8MShvyMpHE1FDs9p2+LTKnz8wNgynvPIZjvhjE77udCGWRtUe7th3KzvrMXAKeAxcAB4DF4DHwAXgMXABeAxcAB63wBjT/KhvbN7GfCFQAo9bMPdYfIvVot9I02b58voG65vdZeBxC4Yer6RUB48772tHgMeNSNOeZi4UZ83O+yJqvCPA4xaa5uNuM2VTPQCPDwg8bsHcY/Na1sRjilnfYeBxC5I9TTI13XUZLjSpj5XXSe/jsyHA4xZEXaTXYpvZKpWGco5vbYn5WAM8bkQ555nUFasuhMcHBx63QOdxU8XStDo81gCPW2iqHw7osaY+qa+uL83BDB63ovdYb6HJwlaP6/rC4zrwuAV9IdHNY827TWWMvicAHjci3uet9FysvnrruvrlrDm9j9KGAI+BC8Bj4ALwGLgAPAYuAI+BC8Bj4ALwGLgAPAYuAI+BC8Bj4AIVj8OL7zzyxGlAxF/99bd774PDhBffyT1GSMMYxpk2GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfG0EHlMH42sj8Jg6GF8bgcfUwfjaCDymDsbXRuAxdTC+NgKPqYPxtRF4TB2Mr43AY+pgfKmyv78/K8IY46/39/f77pqDgceEOXz4sPRHoQ8dOgSPKQKPCXP8+HHJ46NHj/bdKTcDjwmTVRRirl692nen3Aw8po1YWqCooAs8po1YWqCooAs8po1YWqCooAs8Jk9WWqCoIA08Jk9WWqCoIA08Jk9WWqCoIA08tpEjR46gqCBN7vHszkf+ydcBEd958lTvfXCY2Z2Pyr+TfuLc3sW9DwDYLk6c2yv/Tvqz5/fOXrrZ+99uB2BVzl66CY/B1gOPgQvAY+AC8Bi4ADwGLgCPgQvAY+AC8Bi4ADzuwHw8lP5LJebFq24k8dhonPZ+LI4AjzsS+Yz5Sfl6NSmzKwEerw143JHpZMQ9nqXhYOUpeT4ewuO1AY87InicTa5BxN9Nw0FWbVQaiEuWVY8TjzEvLpr5SbaEMTaYzHs/0q0AHndkOhk1FMeJNwyni2WmrxcvZ3HAsiVxIOjOPeaWj8YpvwaCaCGsCNqAxx3J5+NaRSH6XZ2AM0f5HCzOx4Xxi2Xl/i8NB+I0D5qBxx3hdcV0MhKLiulkpCwGCr/hMQnwuCNCfZx4wrxbuf9bJF4xZw8mc8zHdMDjjojP3WZxUN6TCZXGdBKMU8FseEwGPO6A8PyhuA+LfOFeLQ6Y+LSBP74Yjvg9nNheeM23HETFI4tKhQ0agMfABeAxcAF4DFwAHgMXgMfABeAxcIEt8JgxtvaWK61Sb6NZS3yrQ3+6dXilHa3aQ4qjWDtb5rH86+vVIeY/1psd5PSLm1WuqNydsgMmvZK2adhn/bFr3NUPwlZIPNtGjzWj3OSZsmXr+dZvttWnpjbS1vQdUP6o36x+YdNOlbqbD1HvbLTH9eHTiKtpplnR8MSbb8HkoDRb1uzF5CoyP5wO6x7wwEnZaI/rA2c4e7XOIuaTTZPH9Y7V2zQtlPalFFRat5uRyl2vfYg2ge3zWH+eWlfRLFRuUOmiSd9a+2PuMf9XkklabrJfcwsNh2hD2HSPNVOX5kcTjzWTTf1f5Sr1Xeu719TJVo8NB0q5kaYBbDp2wyHaNLbDY/G8tg695hwoz7pyC8qWra9N9q7pj7RE322TftYP09xCzRD1bkWdjfZYeXaVL+quNI17k2R1afSbUrbUuKU5BOWRavqvX65pI72lP3bzIdoENtrj1jNkco5Nxp2fns4eN11yJiZp+lnv2Bo91hyp+VsbwrZ6bHKSTGYR6a1uHptPsfr5T9kxw4tTbLwuj81Hvne20mP9VGd+4lc6l3rtNI01l1BTzztsUzm1d/a46eOl9aD6Yvs8bh1c/YlvnZ6blph7bPiRvdJEa741TZ+V46D8fGg9EHi8Moafp8qToVzetBfNDK25lqSFq14hrarVD0RzUK0tDRXXbLB3H5RsgccAtAKPgQvAY+AC8Bi4ADwGLgCPgQvAY+AC8Bi4ADwGLgCPgQtUPH7+1XceO/bK955+DYDt4rFjrzz/6ju5x198+dX7H34MwDbyxZdf/T+D2WhSP7X25AAAAABJRU5ErkJggg==" alt="" />

1.3.1认证

aaarticlea/png;base64,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" alt="" />

ini配置

#对用户信息进行配置
[users]
#用户账号和密码
zhangsan=111111
lisi=22222

Java代码

package cn.qlq.authentication;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test; /**
* 用户认真的测试
*
* @author: qlq
* @date : 2017年7月28日下午7:35:32
*/
public class AuthenticatetTest { @Test
public void authenticationTest() {
//// 创建securityManager工厂,通过ini配置文件创建securityManager工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini"); // 创建SecurityManager
SecurityManager securityManager = factory.getInstance(); // 将securityManager设置当前的运行环境中
SecurityUtils.setSecurityManager(securityManager); // 从SecurityUtils里边创建一个subject
Subject subject = SecurityUtils.getSubject(); // 在认证提交前准备token(令牌)
// 这里的账号和密码 将来是由用户输入进去
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); try {
// 执行认证提交
subject.login(token);
} catch (AuthenticationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 是否认证通过
boolean isAuthenticated = subject.isAuthenticated(); System.out.println("是否认证通过:" + isAuthenticated); // 退出操作
subject.logout(); // 是否认证通过
isAuthenticated = subject.isAuthenticated(); System.out.println("是否认证通过:" + isAuthenticated); }
}

测试

aaarticlea/png;base64,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" alt="" />

执行流程

1、通过ini配置文件创建securityManager

2、调用subject.login方法主体提交认证,提交的token

3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。

4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息

5、IniRealm根据输入的token(UsernamePasswordToken)从 shiro-first.ini查询用户信息,根据账号查询用户信息(账号和密码)

如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码)

如果查询不到,就给ModularRealmAuthenticator返回null

6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息

如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException)

如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)和 token中的密码 进行对比,如果不一致抛出异常(org.apache.shiro.authc.IncorrectCredentialsException)

小结:

ModularRealmAuthenticator作用进行认证,需要调用realm查询用户信息(在数据库中存在用户信息)

ModularRealmAuthenticator进行密码对比(认证过程)。

realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

Shiro简介及入门(四)的更多相关文章

  1. Shiro简介、入门案例、web容器的集成

    目的: shiro简介 Shiro入门案例 Shiro与web容器的集成 shiro简介(中文官网:https://www.w3cschool.cn/shiro/andc1if0.html) 1.什么 ...

  2. 微服务(入门四):identityServer的简单使用(客户端授权)

    IdentityServer简介(摘自Identity官网) IdentityServer是将符合规范的OpenID Connect和OAuth 2.0端点添加到任意ASP.NET核心应用程序的中间件 ...

  3. Quartz入门例子简介 从入门到菜鸟(一)

    转: Quartz入门例子简介 从入门到菜鸟(一) 2016年11月19日 22:58:24 爱种鱼的猫 阅读数:4039   刚接触quartz这个词并不是在学习过程中...而是WOW里面的界面插件 ...

  4. springboot+mybatis+shiro——shiro简介

    转载:[一]shiro入门 之 Shiro简介 一.shiro介绍: 官方网址:http://shiro.apache.org/introduction.html,shiro的功能包括:认证.授权.加 ...

  5. (一)shiro简介和用户登录demo及角色管理

    一.shiro简介 Apache Shiro是Java的一个安全框架.Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境.Shiro可以帮助我们完成 ...

  6. 爬虫入门四 re

    title: 爬虫入门四 re date: 2020-03-14 16:49:00 categories: python tags: crawler 正则表达式与re库 1 正则表达式简介 编译原理学 ...

  7. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  8. python3-day1-python简介及入门

    python简介及入门 python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ...

  9. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

随机推荐

  1. 点分治模板(洛谷P4178 Tree)(树分治,树的重心,容斥原理)

    推荐YCB的总结 推荐你谷ysn等巨佬的详细题解 大致流程-- dfs求出当前树的重心 对当前树内经过重心的路径统计答案(一条路径由两条由重心到其它点的子路径合并而成) 容斥减去不合法情况(两条子路径 ...

  2. BZOJ 2159: Crash 的文明世界(树形dp+第二类斯特林数+组合数)

    题意 给定一棵 \(n\) 个点的树和一个常数 \(k\) , 对于每个 \(i\) , 求 \[\displaystyle S(i) = \sum _{j=1} ^ {n} \mathrm{dist ...

  3. [hgoi#2019/3/10]赛后总结

    关于本次hg模拟赛,题目来源于CF1110. t1-无意义运算符(meaning) 题目描述 最大公约数和位运算之间有共同点吗?是时候来研究一下了. 给定一个正整数a,请找到一个闭区间[1,a-1] ...

  4. Elasticsearch GC 时间过长的解决方法

    前言:GC 时间过长是个常见的问题,下文我将对应的现象和解决方案进行阐述.为什么这么解决,可以参考我的另外一个博客中的内存使用和GC指标这个章节 我们有时会发现elasticsearch集群挂掉,或者 ...

  5. [学习笔记]prufer序列

    前言 PKUWC和NOIWC都考察了prufer序列,结果统统爆零 prufer序列就是有标号生成树对序列的映射 prufer序列生成 每次选择编号最小的叶子删掉,把叶子的父亲加入prufer序列,直 ...

  6. (转)Java transient关键字使用小记

    背景:最近在看java底层的源码实现,看到一个关键字,不是很熟悉,专门做个记录. 原文出处:http://www.importnew.com/21517.html#comment-637072 哎,虽 ...

  7. centos7 上配置Javaweb---MySQL的安装与配置、乱码解决

    上一篇谢了关于jdk和tomcat的安装.今天先更新一下有用的. 1. 不用关闭防火墙,把80端口添加进防火墙的开放端口. firewall-cmd --zone=public --add-port= ...

  8. mysql5.6下载及安装(超级详细)

    经过本人的实验,验证这些东西都是OK的 博客原文地址:http://www.cnblogs.com/Percy_Lee/p/5282187.html

  9. java常见面试题及三大框架面试

    Java基础方面: 1.作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √  ...

  10. python---redis缓存页面实现

    import tornado.web from controllers.BaseController import BaseRequestHandler import redis pool = red ...