今晚有做过一个登录验证,即防止用户跳过登录页面直接访问内部资源。
原理:设置过滤器Filter,对每次请求判断:是否有cookie (user, id), 若有,是否此cookie和session中所存储对象id一致。若无cookie或不一致,则重定向跳转回登录或注册页面。
中间一直存在一个问题,即设置了cookie且可以在浏览器中查到,但是后台始终无法getCookie,原因如下:
Cookie的默认作用域为当前应用请求中,默认不设置path的时候,只会在请求和servlet同路径的情况下才会携带cookie中存储的数据,包含同级目录和下级目录。
例如,我的登录页面为shop/login.jsp , 因此同级目录为shop. 而我在Controller中shop/user/logIn 中添加的cookie, 因此同级目录为shop/user。因此Cookie只在shop/user下有效,而在shop/下无效。每次访问其他资源或登录完成后重定向跳转其他资源如index.jsp时,其路径为shop/index.jsp,并不在shop/user下,因此无效。
所以,请切记添加cookie.setPath()来指定路径,
- cookie.setPath(“/”) 即为全路径
- cookie.setPath(“/shop/") 即为项目目录下,因此shop/index.jsp可以使用cookie。
@Controller
@RequestMapping<