简述 web.xml 中 listener, filter, servlet 的作用。
servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。
参考资料:
http://blog.csdn.net/netdevgirl/article/details/51483273
查阅 httpSession 和 httpCookie 的API,他们是接口?对象?
httpSession是一个接口。提供一个方式去识别有多个请求的用户或者储存用户信息。
httpCookie是一个对象,用来表示一个 http cookie,该 cookie 带有服务器和用户代理之间的状态信息。广泛采用 Cookie 来创建有状态 (stateful) 会话。
用自己的话,简述 “Check Authentication using Spring MVC and Handler Interceptor” 程序认证过程
先预处理,保证URL不会出现重定向循环。然后使用
LoginForm userData = (LoginForm) request.getSession().getAttribute("LOGGEDIN_USER");
得到现在储存的用户信息。如果userData为null,说明没有用户被认证,就返回false,然后回到登录页面。否则就返回true。
用案例简述 Shiro 认证与授权的过程。
认证过程:
首先调用 Subject.login(token)进行登录,其会自动委托给 SecurityManager,调用之前 必须通过 SecurityUtils. setSecurityManager()设置;
SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;
Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以 自定义插入自己的实现
Authenticator 可能会委托给相应的 AuthenticationStrategy 进行 Realm 身份验证
Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,如果没有 返回/抛出异常表示身份验证失败了。此处可以配置多个 Realm,将按照相应的顺序及策略 进行访问。
授权过程:
授权过程在shiro.ini中配置。例如如果在配置文件中这样写:
[users]
zs=123, role1,role2
ls=111, role1
[roles]
role1=user:create,user:update
role2=user:create,user:delete
那么,结果就是,zs拥有role1和role2的角色,因此他的权限有create, update和delete。而ls只拥有role1的权限,他就不能delete了。同时,zs可以访问role1和role2的URL,而ls只能访问role1的。