springboot开发笔记(4.后台系统登录)

部分代码

web层代码:joy_bms(redis、filter登录控制)
https://github.com/bjjoy/joy_bms.git

http对接service层代码:auth项目git地址
https://github.com/bjjoy/service_auth

1.前言

本文给出请求处理层(web)代码,内容包括
(1)引入redis:对象读写,保存登录用户信息
(2)filter:过滤请求,用户未登录或过期完成退出

2.redis安装

(1)搜索下载redis,本文是windows版Redis-x64-3.2.100
(2)搜索下载安装可视化工具RedisDesktopManager

3.新增红框目录

这里写图片描述
(1)auth.service

  • AuthUserService依赖redis包,以sessionId作为key,读取、写入、更新当前用户信息,设置超时1800s。
  • CurrentUser当前用户信息
  • SessionFilter处理除登录意外请求,未登录要返回提示,主要代码片段如下
@WebFilter(filterName="sessionFilter",urlPatterns="/test/*")
public class SessionFilter implements Filter {
    @Autowired
    AuthUserService authUserService;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        HttpServletResponse httpServletResponse = (HttpServletResponse)servletResponse;
        CurrentUser currentUser = authUserService.getCurrentUser();
        if (currentUser != null){
            //存在用户刷新redis用户过期时间
            authUserService.updateUserTime();
        }else {
            httpServletResponse.sendRedirect("/user/error");
        }
        filterChain.doFilter(httpServletRequest,httpServletResponse);
    }

    @Override
    public void destroy() {}
}

注意:采用注解设置filter,要过滤的url格式如:urlPatterns={“/test/“,”/product/“},并且需要在Application文件添加注解@ServletComponentScan,如下

@SpringBootApplication
@EnableCaching
@ServletComponentScan
public class JoyBmsApplication {

(2)redis

  • pom.xml引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • RedisConfig和RedisMapService,提供对象的增删改查

(3)web给出测试程序和登录程序
(4)properties文件添加redis设置如下

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=8
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=1
# 连接超时时间(毫秒)
spring.redis.timeout=2000

4.测试样例

(1)运行redis,redis-server.exe
(2)运行可视化工具
这里写图片描述
(3)打开postman,运行文章顶端joy_bms,auth,运行mysql

  • postman执行post请求:

http://localhost:8020/user/auth/login?loginName=test2&password=123456

  • 返回结果
{
    "traceID": null,
    "code": 200,
    "msg": "successful",
    "data": null
}
  • redis内容
    这里写图片描述

(4)获取当前用户

{
    "traceID": null,
    "code": 200,
    "msg": "successful",
    "data": {
        "uuid": "e170921d5e4f4d52bde5ffdb6ef08d33",
        "loginName": "test2",
        "mobile": null,
        "loginIp": null,
        "loginDate": null
    }
}

5.遗留问题

(1)跨域问题,前端项目ajax请求会失败,由于前端项目端口或域名与joy_bms不一致
(2)filter是url级别限制,没有与角色权限绑定,没有完成根据角色对访问的控制
(3)session没有共享,分布式部署时,不同tomcat各自管理session,获取当前登录用户会失败。

6.感悟

(1)感觉稍微有点明了了,通过springboot开发笔记1~4
(2)要解决遗留问题还是挺麻烦的
(3)前端不太熟,希望以后能补上前端内容,完成一个完整的权限管理模块

猜你喜欢

转载自blog.csdn.net/bjjoy2009/article/details/78725398