只是进行权限管理和登录认证的笔记,
直接入正题,shiro使用首先需要先将自己交给spring管理,并且需要在web.xml文件中配置过滤器
DelegatingFilterProxy是在org.springframework.web.filter下,说明该类是spring包下的类,通过继承GenericFilterBean类间接的实现了javax.servlet.Filter接口.servlet容器在启动时候,首先调用Filter的init方法.而targetFilterLifecycle的默认值是false,这个属性的作用是GenericFilterBean类留给子类扩展用的,false的话spring无法使用init()和destroy()方法。所以这个属性必须添加的时候手动更改为true;
该过滤器就是使用来历模式把容器中的filter与spring的bean关联起来;
交给spring管理之后,spring的xml文件中需要为之配置bean(万物皆bean);
注意的就是配置spring的时候需要代理方式改为动态代理的方法,不过这些通常不需要进行更改.属于固定配置,用户需要配置的是realm并将之交给安全管理器,使用权限管理器的时候将安全管理器引入即可,一般密码都是加密的密文.用户输入的明文在进行校验的时候需要转化成相应的密文,所以加密算法必不可少.需要将之配置到realm中,这样才能与数据库进行准确的交互
作为安全框架.当用户验证失败的时候必须要给返回一个指定的页面.所以需要配置一个过滤器,当用于验证失败的时候返回,一般是登录页面.同时过滤器同样需要将之交给安全管理器来管理
以上就是配置的内容.配置完成之后还需要手写realm的类(id=AuthRealm)的类
进行密码验证的时候.就是使用AuthenticationToken(令牌:大王叫我来巡山小钻风手中的代表身份的令牌),令牌中是用于登录时候输入的用户名和密码,返回的AuthenticationInfo就是验证之后的信息
内部通过AuthenticationToken进行传递,但是底层依旧是一个UsernamePasswordToken的对象。验证和加密措施分开写是为了代码的灵活性,当加密方法改变只需要专注加密的板块就好了,或者在配置文件中将加密的bean的class改变即可。提高代码复用和灵活性;
最后登录板块完成。(账号密码为空会在刚接受url中进行校验)如果登录失败会返回xml中指定的页面,登录成功shiro内部有sessionmanager。登录成功之后web容器中有存在相应的session,所以登录成功之后就拦截就接触了
最后进行权限验证
shiro对外访问就是通过subject来交互的,登录成功后才会有用户的权限信息,通过从
得到用户只需要使用getPrincipal()就可,通过用户的id可以通过多表联查查询到用户的角色(职位)最终查询到用户的权限信息
权限信息就得到了,最后显示.使用shiro的标签通过验证就完成了