1、注册验证码的生成(使用谷歌的Kaptcha验证码工具)
先写验证码配置类KaptchaConfig,然后在controller中写验证码生成方法,获得的验证码要存到会话sesiion,以供用户输入时对比
2、表单校验
在控制器AuthController中使用表单验证工具类ValidationUtil(spring-boot-starter-web包里面有hibernate-validator包,不需要引用hibernate validator依赖)校验用户的注册信息
3、登录
使用shiro的api,UsernamePasswordToken是一个包含用户输入的username及password的登录验证token。SecurityUtils.getSubject().login(token)方法的底层实现是通过Realm类,需要自己自定义Realm类
登录验证的过程就是:Subject(用户)执行login方法,传入封装用户登录信息的token,然后SecurityManager将这个login操作委托给内部的登录模块,登录模块就调用Realm去获取安全的用户名和密码,然后对比,一致则登录,不一致则登录失败。最后结合shiro-freemarker的标签(如<@shiro.guest>,<@shiro.user>)将结果写于ftl中
自定义AccountRealm类实现认证授权操作,然后在UserServiceImpl类中实现具体的login业务,最后将AccountRealm注入到配置类ShiroConfig中,并配置拦截器,用于URL的访问控制,控制哪些URL需要权限控制,哪些不需要权限控制,anon是不需要权限,auth是需要
进行 Shiro 的配置主要配置 3 个 Bean :
- 首先需要提供一个 Realm 的实例。
- 需要配置一个 SecurityManager,在 SecurityManager 中配置 Realm。
- 配置一个 ShiroFilterFactoryBean ,在 ShiroFilterFactoryBean 中指定路径拦截规则等。
ShiroFilterFactoryBean 的配置稍微多一些,配置含义如下:
- setSecurityManager 表示指定 SecurityManager。
- setLoginUrl 表示指定登录页面。
- setSuccessUrl 表示指定登录成功页面。
- 接下来的 Map 中配置了路径拦截规则,注意,要有序。
4、上传头像
在UserController中使用UploadUtil工具类,并写个配置类MvcConfig,为上传的头像新增个保存目录
5、用户信息的修改
修改用户信息到数据库后,但是右上角登录信息没有修改,因为修改后的登录用户信息没有设置到profile
6、消息提醒(系统消息、评论文章消息、回复评论消息)
先自定义查询语句,获得当前登录用户的消息信息,然后将未读的消息id存于list集合,并将其批量修改成已读