Web 授权与认证
实验内容
1. 简述 web.xml 中 listener, filter, servlet 的作用。
listener:
IntrospectorCleanupListener:主要负责处理由JavaBean Introspector使用而引起的缓冲泄露,
ContextLoaderListener:启动Web容器时,自动装配ApplicationContext的配置信息
filter:
SpringEncodingFilter:解决乱码问题,使用UTF-8编码
shiroFilter:配置Shiro过滤器,先让Shiro过滤系统接收到的请求
servlet:
SpringMVC:配置SringMVC核心分发器
2. 查阅 httpSession 和 httpCookie 的API,他们是接口?对象?
HttpSession是接口;HttpCookie是对象
3. 用自己的话,简述 “Check Authentication using Spring MVC and Handler Interceptor” 程序认证过程
如果输入的用户名和密码和设置的properties文件中的登录名和密码一致,就将用户相关信息封装到这个请求的session的LOGGEDIN_USER属性当中;之后这个用户再次登陆的时候,在Handler发出之前检测url信息,得到LOGGEDIN_USER属性中的LoginForm,进行了认证
4. 用案例简述 Shiro 认证与授权的过程。
根据Shiro教程中的案例,认证过程如下:
调用 Subject.login(token)进行登录,其会自动委托给 Security Manager,调用之前必须通过 SecurityUtils. setSecurityManager()设置
SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;
Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以
自定义插入自己的实现;
Authenticator 可能会委托给相应的 AuthenticationStrategy 进行 Realm 身份验证;
Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个 Realm,将按照相应的顺序及策略
进行访问。
授权过程:
在shiro.ini中有设置用户有的角色和权限
可以自己写权限授予部分的实现;同样继承 AuthorizingRealm 抽象类,重载doGetAuthorizationInfo(),重写获取用户信息。