shiro配置登录验证(前后端分离项目)

nullcy 2020-05-26

本次只是记录一下启用shiro配置过程遗忘掉的几个关键点,首先项目是前后端分离的后台,提供json格式的接口数据,但又是一个web项目,现在要控制登录之后才能使用
1、ShiroFilterFactoryBean我这里是一个自定义的,继承ShiroFilterFactoryBean,重写了setFilterChainDefinitions方法,因为动态权限数据是从数据库查来的,下面说这个bean的loginUrl和unauthorizedUrl属性,一般这俩个配置的是一样的,这个属性的值配置的/login,这个地址不一定要有,项目没有这个requestmapping地址也没有问题,关键在filterChainDefinitions里面这个/login地址要配置成anon,项目用来登录的接口也要在这里配上anon,前端用的js和css,图片地址要在这里配置上anon,其它的全部是authc
2、如果有自定义的filter,配置filters的时候,entry里的key要和filterChainDefinitions里的有的对应上(比如前面用的authc),filterChainDefinitions里用的验证名,和自定义的filter用的key一样的时候,这个filter才会起作用
3、自定义的filter在重写isAccessAllowed方法的时候,要判断请求是不是ajax请求,是ajax请求没有权限或登录失效要用response返回json数据,不能跳转登录页面,还有一点如果使用response里的out返回给前端数据,那么当前方法要return false,不然会报Cannot call sendError() after the response has been committed 这个错
4、登录的时候密码验证是自己些的realm中doGetAuthenticationInfo这个方法中,如果前面使用的UsernamePasswordToken登录的,这里的token可以转换成UsernamePasswordToken,从里面拿到的用户名和密码,前面登录创建UsernamePasswordToken的时候用的什么参数,这里就会拿到什么

相关推荐