![img](https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fp3.ssl.qhimg.com%2Ft0166542ac0759ab525.png&refer=http%3A%2F%2Fp3.ssl.qhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1642428815&t=f486dc0d3f2581c0afaf0cce7eaa0d57) # SpringSecurity 本章我们会一边讲解SpringSecurity框架,一边从头开始编写图书管理系统。 SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核心功能包括: - 认证 (用户登录) - 授权 (此用户能够做哪些事情) - 攻击防护 (防止伪造身份攻击) 我们为什么需要使用更加专业的全新验证框架,还要从CSRF说起。 ## CSRF跨站请求伪造攻击 我们时常会在QQ上收到别人发送的钓鱼网站链接,只要你在上面登陆了你的QQ账号,那么不出意外,你的号已经在别人手中了。实际上这一类网站都属于恶意网站,专门用于盗取他人信息,执行非法操作,甚至获取他人账户中的财产,非法转账等。而这里,我们需要了解一种比较容易发生的恶意操作,从不法分子的角度去了解整个流程。 我们在JavaWeb阶段已经了解了Session和Cookie的机制,在一开始的时候,服务端会给浏览器一个名为JSESSION的Cookie信息作为会话的唯一凭据,只要用户携带此Cookie访问我们的网站,那么我们就可以认定此会话属于哪个浏览器。因此,只要此会话的用户执行了登录操作,那么就可以随意访问个人信息等内容。 比如现在,我们的服务器新增了一个转账的接口,用户登录之后,只需要使用POST请求携带需要转账的金额和转账人访问此接口就可以进行转账操作: ```java @RequestMapping("/index") public String index(HttpSession session){ session.setAttribute("login", true); //这里就正常访问一下index表示登陆 return "index"; } ``` ```java @RequestMapping(value = "/pay", method = RequestMethod.POST, produces = "text/html;charset=utf-8") //这里要设置一下produces不然会乱码 @ResponseBody public String pay(String account, int amount, @SessionAttribute("login") Boolean isLogin){ if (isLogin) return "成功转账 ¥"+amount+" 给:"+account; else return "转账失败,您没有登陆!"; } ``` 那么,大家有没有想过这样一个问题,我们为了搜索学习资料时可能一不小心访问了一个恶意网站,而此网站携带了这样一段内容: ```html