APP下载

基于SSM+Spring Security的多角色登录功能后台实现

2020-04-23孙云杰段祎林田盼栋赵雪玲

电子技术与软件工程 2020年5期
关键词:教学系统密码框架

孙云杰 段祎林 田盼栋 赵雪玲

(西安石油大学理学院 陕西省西安市 710300)

1 引言

随着互联网技术的不断发展,登录界面的功能给开发者提出了更高的要求, 登录界面具有在控制用户权限、记录用户行为的同时,保护操作安全的作用,所以它是必须提供账户和密码的界面。开发者和用户看到的登录界面是不同的“景向”,用户要求的登录界面是:便捷、美观和实用;而开发者既要考虑登录功能的认证和授权,又要保障操作的安全性,还要简化实现功能的繁琐代码等一系列问题。

2 登录界面核心要素及重要技术

2.1 核心要素

在实现多角色多用户登录的教学系统设计中,必须要通过如下的措施来保障系统的正常运行。

(1)多角色用户认证,登录功能需要根据用户的角色授予相应的权限,因此在教学系统中设定三种用户角色:学生、教师和管理员;

(2)预防Web 的恶意攻击,就需要在登录时,做好Web 免受攻击的防御措施,Web 常见的攻击手段:恶意脚本发起攻击(XSS)、借助cookie 伪造认证发送请求攻击(CSRF)、用SQL 语句伪造参数发出攻击、大量请求指令使服务器崩溃(DDoS)等等;

(3)考虑用户停留页面无任何操作或者关闭页面一段时间后,避免在信息泄露引起不必要的纷争等情况;

(4)要限制单用户同时在不同的设备上运行;

(5)确保用户密码的安全,在密码的传输和存储中都需要以密文的形式进行,加密方式应当采用不可逆的Нash 算法,如:MD5 算法、SНA 系列算法等;

(6)为了防止黑客使用暴力破解方式进行登录尝试,在登录时需要添加验证码进行验证。

2.2 重要技术

完美的教学系统设计离不开技术的支持,该系统中所设计的技术有:

(1)Bootstrap 是最受欢迎的НTML、CSS 和JS 框架之一,所以采用Bootstrap 作为主要的前端框架进行页面编写,用于开发响应式布局、移动设备优先的WEB 项目。

(2)SSM框架是Spring、SpringMVC 和MyBatis框架的组合,是Java 领域采用标准的MVC 模式构成的开源Web 框架,是以Spring 为核心的分层架构,它的出现能解决Web 系统中规模庞大的应用、复杂度不断提升的问题[1]。

Spring 利用控制反转(IoC)技术促进了低耦合,在系统运行中IoC 能动态地向某个对象提供它所需要的其他对象;而面向切面编程(AOP)则是用来提升内聚,可以方便地实现对程序进行权限拦截、运行监控等功能[2]。

SpringMVC 是Spring 提供的一个强大而灵活的Web 框架,借助于普通Java 对象(POJO) 的开发模式,使用注解的方式进行开发,能够让开发者直观明了地进行设计和学习,从而简化控制器的开发和测试[3]。

图1:登录功能的数据库结构图

MyBatis 是持久层框架,它的核心技术是对象关系映射(ORM),实现了Java 数据库连接(JDBC)的封装,可以使用简单的xml 文件配置或注解,做到接口和Java 的POJO 与数据库中数据表的记录相映射,使得编程人员可以使用面向对象的编程思想来操作数据库,将数据库层完全隐蔽[1]。

(3)Spring Security 是基于Spring 的企业应用系统,能提供声明式的访问控制的安全框架,其中有一组可以在Spring 应用上下文中配置的Bean 及相关的配置文档,借助于IOC,DI (依赖注入)和AOP 功能将用户身份认证进行统一的管理,从而实现对资源访问的综合管控与维护[4]。

3 数据库的设计

数据库是登录界面的灵魂,是它把重要技术和核心要素有机的结合在一起。登录功能的数据库里有两个实体表:用户表和角色表,用户和角色多对多的关系,中间表是用户和角色的纽带。其中,用户表中密码存储的是经过加密后的密码,如图1 所示。

4 登录功能模块架构

4.1 模块依赖总览

登录功能的开发离不开如下五个模块:common 公用工具类; entity 实体类; login 登录功能模块(程序入口); mapper 映射器类; service 服务类。模块之间的依赖关系(如图2 所示)是: login 模块依赖common、entity、service 模块; service 模块依赖entity、mapper 模块; mapper 模块依赖entity 模块。

4.2 主要的模块

4.2.1 common 模块

common 模块封装公用的工具类,其中包含三个类:ApiResponse(通用的API 接口封装)、BaseException(异常基类)和SecurityException(全局异常);一个接口:IStatus(状态码接口);两个枚举:Roles(用户角色枚举)、Status(通用状态码)。Roles枚举中定义了三个用户角色:学生(Student)、教师(Teacher)、管理员(Administrator),分别与数据库role 表中的角色对应。其中,“ROLE_”是Spring Security 角色权限的特定前缀。

图2:模块依赖总览图

4.2.2 entity 模块

entity 模块封装实体类,其中包含两个实体类:User(用户)、Role(角色),这个模块在项目中引入了lombok,是为了在编译时自动为实体类的属性生成构造器、getter/setter、equals、hashcode、toString 方法,在编译生成的字节码文件中会自动生成getter 和setter 方法。

4.2.3 mapper 模块

mapper 模块封装映射器,任持久层的角色,其中包含两个映射器接口:UserMapper、RoleMapper,两个配置文件UserMapper.xml、RoleMapper.xml。mapper 是MyBatis 集成在项目中的核心内容,为service 层提供调用方法,实现java 对数据库的增、删、改、查操作。

4.2.4 service 模块

service 模块封装服务类, 是业务层的角色,其中包含一个服务类:UserDetailsService,实现了Spring Security 的核心接口,主要用于加载用户特定的数据。

4.2.5 login 模块

login 模块为程序的入口,主要实现用户的登录认证、授权功能,其中包含四个package:config(配置类,包括SecurityConfig核心配置)、cotroller(前端控制器,包括LoginController 登录控制器、CaptchaController 验证码生成器)、filter(过滤器,包括CaptchaVerifyFilter 验证码验证过滤器)、handle(处理器,包括CustomizedAuthenticationSuccessНandler 认证成功处理器、Custom izedAuthenticationFailureНandler 认证失败处理器),和启动类:LoginApplication。

系统登录控制器LoginController 的核心代码如下(由于篇幅有限,其它模块的代码不再详述):

Spring Security 的核心配置类:SecurityConfig,在其核心代码中配置了CaptchaVerifyFilter 验证码验证过滤器,设置X-Frame-Options 为SAMEORIGIN,CustomizedAuthenticationSuccess Нandler 认证成功处理器,而CustomizedAuthenticationFailureНand ler 是认证失败处理器,期间开启csrf 攻击的防御功能,登录和注销的基础配置,使访问路径的访问权限合法化,session 管理器,BCryptPasswordEncoder 加密方法。

图3:登录页面

图4:登录验证码验证界面

Spring Security 中的BCryptPasswordEncoder 方法,采用SНA-256+随机盐+密钥对密码进行加密,SНA 系列是Нash 算法,其过程是不可逆的,主要是为了加强密码保存的安全性而设计的。

5 登录界面前端页面

利用上面所讲述的方法完成的教学系统登录界面如图3、图4所示。

6 总结

登录功能在视觉上的美观、便捷的操作以及用户信息的安全,是一个网站的刚性需求。

网站的入口、门面是网站的第一道防线,安全的重要性不言而喻,集成了Spring Security 为登录功能的开发手段,给使用者提供了极大的便利及安全保障。登录功能看似简单,但深究其背后的设计与开发,可以引申出诸多问题需要我们不断完善与充实。

猜你喜欢

教学系统密码框架
密码里的爱
基于Unity的计算机硬件组装仿真教学系统设计
广义框架的不相交性
密码抗倭立奇功
多地远程互动同步教学系统的设计与实现
WTO框架下
基于交互式双板教学系统的高中地理教学研究
汽车配件营销实践教学系统开发
一种基于OpenStack的云应用开发框架
夺命密码