你还不了解基于session的授权认证吗? (4)

(3)登录Controller,对/login请求处理,它调用AuthenticationService完成认证并返回登录结果提示信息:

你还不了解基于session的授权认证吗?

(4)测试
启动项目,访问/路径地址,进行测试

实现会话功能

会话是指用户登入系统后,系统会记住该用户的登录状态,他可以在系统连续操作直到退出系统的过程。 认证的目的是对系统资源的保护,每次对资源的访问,系统必须得知道是谁在访问资源,才能对该请求进行合法性拦截。因此,在认证成功后,一般会把认证成功的用户信息放入Session中,在后续的请求中,系统能够从Session 中获取到当前用户,用这样的方式来实现会话机制。
(1)增加会话控制
首先在UserDto中定义一个SESSION_USER_KEY,作为Session中存放登录用户信息的key。

你还不了解基于session的授权认证吗?

然后修改LoginController,认证成功后,将用户信息放入当前会话。并增加用户登出方法,登出时将session置为失效。

你还不了解基于session的授权认证吗?


你还不了解基于session的授权认证吗?

(2)增加测试资源
修改LoginController,增加测试资源1,它从当前会话session中获取当前登录用户,并返回提示信息给前台。

你还不了解基于session的授权认证吗?

(3)测试
未登录情况下直接访问测试资源/r/r1:

你还不了解基于session的授权认证吗?

成功登录的情况下访问测试资源/r/r1:

你还不了解基于session的授权认证吗?

测试结果说明,在用户登录成功时,该用户信息已被成功放入session,并且后续请求可以正常从session中获取当 前登录用户信息,符合预期结果。

实现授权功能

现在我们已经完成了用户身份凭证的校验以及登录的状态保持,并且我们也知道了如何获取当前登录用户(从 Session中获取)的信息,接下来,用户访问系统需要经过授权,即需要完成如下功能:
匿名用户(未登录用户)访问拦截:禁止匿名用户访问某些资源。
登录用户访问拦截:根据用户的权限决定是否能访问某些资源。
(1)增加权限数据
为了实现这样的功能,我们需要在UserDto里增加权限属性,用于表示该登录用户所拥有的权限,同时修改 UserDto的构造方法。

你还不了解基于session的授权认证吗?

并在AuthenticationServiceImpl中为模拟用户初始化权限,其中张三给了p1权限,李四给了p2权限。

你还不了解基于session的授权认证吗?

(2)增加测试资源
我们想实现针对不同的用户能访问不同的资源,前提是得有多个资源,因此在LoginController中增加测试资源2。

你还不了解基于session的授权认证吗?

(3)实现授权拦截器
在interceptor包下定义SimpleAuthenticationInterceptor拦截器,实现授权拦截:
1、校验用户是否登录 2、校验用户是否拥有操作权限

你还不了解基于session的授权认证吗?


你还不了解基于session的授权认证吗?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyswgz.html