shiro配置登陆验证(先后端分离项目)

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