对于任何一个web应用提供给用户使用,第一步都是让用户登录。对于一些公共的网站用户也可以直接浏览而不用登录,但这种情况下用户能做的也仅仅是浏览而已不能使用这个网站的其他功能,只有登录这个网站或这个网站的管理系统才能使用这个网站除了浏览以外的其他功能或者在管理系统修改这个网站的信息。对于不同的使用需求,网站的开发也不一样,具体怎么设计要看甲方提出的需求。
不论这个系统的需求是怎么样的,在这个系统中认证和授权的设计是一定要有的
当然这种认证授权不是简单的针对某一个方面的,我认为它是涉及前端、后端和数据库并且始终贯穿于整个系统的,在这里我们主要讲后端的认证授权。
我们需要先知道什么是认证,什么是授权,这是两个概念。对于认证最直观的体现就是我使用一个系统时系统要求我们登录,简单说认证就是系统登录,只有登录了,系统才会认为当前用户对于自己是合法用户,允许这个用户使用系统,在这里开发者要做的是如果系统要求用户登录后才能使用,那在用户没有登录时拦截用户的所以请求,并且不能进入系统无法使用系统的任何功能除了登录功能。典型的案例就是,用户没有登录但用户从其他途径知道了这个系统中的一些功能的请求路径,直接在浏览器输入这个功能的 url ,这样如果系统中没有对于这种非法请求的拦截,那这个请求将绕过登录认证直接进入系统,这种情况对于任何系统都是绝对不允许的。
对于授权是用户登录系统后,每个不同的用户都有自己的系统权限,不同的权限在系统能看到不同的页面,使用不同的功能。
对于后端的认证和权限验证在没有使用安全框架时我们常采用拦截器+session来做。这种做法比较复杂,后来就出现了各种安全框架帮我们来处理认证和权限验证大大简化了我们操作,比较常见的就是SpringSecurity和shiro
二、SpringSecurity的简单使用我们这里使用springboot + springsecurity 来演示
首先新建springboot 项目导入springsecurity 启动器
org.springframework.boot spring-boot-starter-security
然后启动springboot
我们在浏览器输入http://localhost:8080/login 会出现下面的页面
用户名默认是 user
密码我们看IDEA的输出日志会有一个字符串,即为此次登录的密码
登录后出现下面的页面
这是因为我们没有设置登录成功的跳转页面,其实已经登录成功了
如果用户名或密码错误会出现以下页面
为了验证是否认证成功我们写个url,登录成功才可以访问
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/test")
public String test() {
return "Hello World";
}
}
没有登录直接访问,会再跳转回登录页面
登录后再访问
这里只是简单的引入SpringSecurity没有做任何配置,用户名默认user,密码是控制台输出的字符串,登录页面也是SpringSecurity默认的,但这样SpringSecurity也为我们自动完成登录授权功能,在实际开发中我们是基于数据库进行的认证和授权,登录页面也是自己写的,所以这样的功能不能满足我们的需求,我们可以自定义SpringSecurity的认证授权,自己配置来满足我们的需求



