spring security

  1. 权限数据管理(增删改查)。
  2. 角色数据管理(增删改查、角色关联权限)。
  3. 用户数据管理(增删改查、用户关联角色)。

导入maven坐标

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>5.0.5.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>5.0.5.RELEASE</version>
</dependency>

配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-security.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>

整合spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:security="http://www.springframework.org/schema/security"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd
"><!--配置哪些资源匿名也可以访问--><security:http security="none" pattern="/login.html"/><security:http security="none" pattern="/css/**"/><security:http security="none" pattern="/img/**"/><security:http security="none" pattern="/js/**"/><security:http security="none" pattern="/plugins/**"/><!--http:用于定义相关权限控制auto-config:是否自动配置true:设置为true时框架会提供默认的一些配置,例如提供默认的登录页面、登出 处理等false:设置为false时需要显示提供登录表单配置,否则会报错use-expressions:用于指定intercept-url中的access属性是否使用表达式--><security:http auto-config="true" use-expressions="true"><security:headers><!--设置在页面可以通过iframe访问受保护的页面,默认不允许访问--><security:frame-options policy="SAMEORIGIN"/></security:headers><!--intercept-url:定义一个拦截规则 pattern:对哪些url进行权限控制access:在请求对应的URL时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列 表, 请求的用户只需拥有其中的一个角色就能成功访问对应的URL --><security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')"/><!--只要认证通过就可以访问--><security:intercept-url pattern="/pages/**" access="isAuthenticated()"/><!--form-login:定义表单登录信息--><security:form-login login-page="/login.html"username-parameter="username"password-parameter="password"login-processing-url="/login.do"default-target-url="/pages/main.html"authentication-failure-url="/login.html"/><!--csrf:对应CsrfFilter过滤器disabled:是否启用CsrfFilter过滤器,如果使用自定义登录页面需要关闭此项,否则登录操作会被禁用(403)--><security:csrf disabled="true"/><!--logout:退出登录logout-url:退出登录后操作对应的请求路径logout-success-url:退出登录后的跳转页面--><security:logout logout-url="/logout.do" logout-success-url="/login.html" invalidate-session="true"/></security:http><!--authentication-manager:认证管理器,用于处理认证操作 --><security:authentication-manager><!--authentication-provider:认证提供者,执行具体的认证逻辑 --><security:authentication-provider user-service-ref="springSecurityUserServiceImpl"><!--指定对密码进行加密的对象--><security:password-encoder ref="passwordEncoder"/></security:authentication-provider></security:authentication-manager><!--配置密码加密对象--><bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/><!--开启注解方式权限控制--><security:global-method-security pre-post-annotations="enabled"/><!--注入springSecurityUserServiceImpl对象--><bean id="springSecurityUserServiceImpl" class="com.itheima.service.SpringSecurityUserServiceImpl"/></beans>

用户的认证和授权controller层

  1. 创建一个类实现UserDetailsService接口重写loadUserByUsername()方法
  2. 通过dubbo调用zookeeper注册中心的UserService
  3. 根据传递的username调用userService查询用户信息
  4. 如果查出来是null则返回空
  5. 如果不为空创建一个权限集合范围为GrantedAuthorty
  6. 根据查询到的用户的信息获取用户的角色信息并授予角色
  7. 遍历角色信息查询用户的权限信息并授予权限
  8. 创建srping security里面的user对象传入三个参数用户名、用户的加密密码、授权的集合信息
  9. 将spring scurity下的user返回
package com.itheima.service;import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;import java.util.ArrayList;
import java.util.List;
import java.util.Set;/*** @author 陈朋* @date 2021/1/7 0007 21:10*/
public class SpringSecurityUserServiceImpl implements UserDetailsService {/*** 使用dubbo通过网络远程调用服务提供方获取用户信息*/@Referenceprivate UserService userService;/*** 根据用户名查询数据库获取用户信息** @param username 用户的名称* @return UserDetails* @throws UsernameNotFoundException 用户信息找不到异常*/@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userService.findUserByUsername(username);if (user==null){return null;}List<GrantedAuthority> list=new ArrayList<>();//动态为用户授权//获取用户的角色信息Set<Role> roles = user.getRoles();//遍历角色集合,为用户授予角色for (Role role : roles) {list.add(new SimpleGrantedAuthority(role.getKeyword()));//获取角色的权限信息Set<Permission> permissions = role.getPermissions();//遍历权限集合,为用户授权for (Permission permission : permissions) {//遍历权限集合,为用户授权list.add(new SimpleGrantedAuthority(permission.getKeyword()));}}return new org.springframework.security.core.userdetails.User(username,user.getPassword(),list);}
}

service接口以及实现类、mapper接口以及xml文件

package com.itheima.service;import com.itheima.pojo.User;/*** @author 陈朋* @date 2021/1/7 0007 21:13*/
public interface UserService {/*** 根据用户名查询用户信息* @param username 用户名* @return 用户实体类*/User findUserByUsername(String username);}
package com.itheima.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.PermissionDao;
import com.itheima.dao.RoleDao;
import com.itheima.dao.UserDao;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;import java.util.Set;/*** 用户服务接口** @author 陈朋* @date 2021/1/7 0007 21:29*/
@Service(interfaceClass = UserService.class)
@Transactional(rollbackFor = Exception.class)
@SuppressWarnings("all")
public class UserServiceImpl implements UserService {@Autowiredprivate PermissionDao permissionDao;@Autowiredprivate RoleDao roleDao;@Autowiredprivate UserDao userDao;/*** 根据用户名查询数据库获取用户信息关联的角色的信息,同时需要查询角色关联的权限的信息** @param username 用户名* @return user对象*/@Overridepublic User findUserByUsername(String username) {//根据用户名查询用户信息User user = userDao.findUserByUsername(username);if (user == null) {//如果用户不存在直接返回nullreturn null;}//获取用户的idInteger userId = user.getId();//根据用户的di查对应的角色Set<Role> roles = roleDao.findByUserId(userId);//编辑角色信息for (Role role : roles) {//获取角色的idInteger roleId = role.getId();//根据角色的id查询权限信息Set<Permission> permissions = permissionDao.findByRoleId(roleId);//角色关联权限role.setPermissions(permissions);}//用户关联角色user.setRoles(roles);return user;}
}
public interface UserDao {/*** 根据用户名查询用户信息* @param username 用户名* @return 用户对象*/User findUserByUsername(String username);}
public interface RoleDao {/*** 根据用户的id查询角色信息* @param userId 用户的id* @return 封装角色的set集合*/Set<Role> findByUserId(Integer userId);}
public interface PermissionDao {/*** 根据角色的id查询权限信息* @param roleId 角色的id* @return 封装权限信息的set集合*/Set<Permission> findByRoleId(Integer roleId);}

在controller上加权限控制注解

/*** 根据id删除检查项** @param id 要删除的检查项的id* @return 封装后的查询结果*/@PreAuthorize("hasAuthority('CHECKITEM_DELETE')")@GetMapping("/delete")public Result delete(Integer id) {try {checkItemService.deleteById(id);} catch (Exception e) {e.printStackTrace();return  Result.failed( MessageConstant.DELETE_CHECKITEM_FAIL);}return  Result.success( MessageConstant.DELETE_CHECKITEM_SUCCESS);}

echarts简介

概念:最牛逼的图形数据表

  1. 根据官网五分钟入门
  2. 连接echatrs入门

项目导入

  1. 导入echarts.js文件<script src="../plugins/echarts/echarts.js"></script>
  2. 导入echarts界面的div
            <div class="app-container"><div class="box"><!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --><div id="chart1"style="height:600px;"></div></div>

前台页面

<!DOCTYPE html>
<html lang="ch"><head><!-- 页面meta --><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>传智健康</title><meta name="description" content="传智健康"><meta name="keywords" content="传智健康"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"><!-- 引入样式 --><link rel="stylesheet" href="../css/style.css"><script src="../plugins/echarts/echarts.js"></script></head><body class="hold-transition"><div id="app"><div class="content-header"><h1>统计分析<small>会员数量</small></h1><el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb"><el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item><el-breadcrumb-item>统计分析</el-breadcrumb-item><el-breadcrumb-item>会员数量</el-breadcrumb-item></el-breadcrumb></div><div class="app-container"><div class="box"><!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --><div id="chart1"style="height:600px;"></div></div></div></div></body><!-- 引入组件库 --><script src="../js/vue.js"></script><script src="../js/axios-0.18.0.js"></script><script type="text/javascript">// 基于准备好的dom,初始化echarts实例let myChart1 = echarts.init(document.getElementById('chart1'));// 使用刚指定的配置项和数据显示图表。//myChart.setOption(option);axios.get("/report/getMemberReport.do").then((res)=>{myChart1.setOption({title: {text: '会员数量'},tooltip: {},legend: {data:['会员数量']},xAxis: {data: res.data.data.months},yAxis: {type:'value'},series: [{name: '会员数量',type: 'line',data: res.data.data.memberCount}]});});</script>
</html>

后台代码

@GetMapping("/getMemberReport")public Result getMemberReport() {Map<String, Object> map = new HashMap<>(2);List<String> months = new ArrayList<>();//获取日历对象,得到的时间就是当前时间Calendar calendar = Calendar.getInstance();//获取当前日期之前的六个月日期calendar.add(Calendar.MONTH, -12);for (int i = 0; i < 12; i++) {calendar.add(Calendar.MONTH, 1);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM");Date date = calendar.getTime();String memberDate = simpleDateFormat.format(date);months.add(memberDate);}//将前六个月注册的会员封装到map集合中map.put("months", months);List<Integer> memberCount = memberService.findMemberCountByMonth(months);map.put("memberCount", memberCount);if (map.isEmpty()) {return Result.failed("查询数据失败");}return Result.success(MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS, map);}

基于ssm+vue的综合项目 健康体检管理系统-第十章-权限控制、图形报表相关推荐

  1. java集合体检套餐管理系统_基于ssm vue的综合项目 健康体检管理系统-第六章

    移动端开发对体检预约进行的查询 当页面加载完毕时,利用vue的钩子函数 已加载页面就直接查询数据将数据进行渲染 created() { axios.post("/setmeal/getSet ...

  2. 基于ssm+vue的综合项目 健康体检管理系统-第六章---移动端体检预约

    移动端开发对体检预约进行的查询 当页面加载完毕时,利用vue的钩子函数 已加载页面就直接查询数据将数据进行渲染 created() {axios.post("/setmeal/getSetm ...

  3. 【JAVA程序设计】基于SSM+VUE前后端分离的物流管理系统

    基于SSM+VUE前后端分离的物流管理系统 零.项目获取 一.项目简介 二.开发环境 三.项目技术 四.系统架构 五.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可 ...

  4. java基于ssm+vue+elementui的旅游线路分享管理系统

    旅游景点路线网站管理系统,是基于java编程语言,ssm框架,mysql数据库制作的设计,本设计主要分为用户和管理员两个角色,用户的主要功能是注册登陆系统,查看旅游景点介绍,查看旅游路线介绍,查看新闻 ...

  5. java基于SpringBoot+Vue的大学生体质健康测试管理系统 element

    大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息,通过留言区互动更方便.本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发. springboot+vue ...

  6. Java+spring 基于ssm的健康体检管理系统#毕业设计

    *文末获取源码 开发环境 项目编号:Java+spring ssm410健康体检管理系统#毕业设计 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tom ...

  7. Java毕业设计、课程设计、实战项目之[含源码等]基于SSM+Vue的SSM学业预警平台信息管理系统[包运行成功]

    基于SSM+Vue的SSM学业预警平台信息管理系统> 后台框架:Spring.SpringMVC.MyBatis 前端:HTML+CSS+JavaScript+vue 数据库:MySQL 管理员 ...

  8. 基于SSM+VUE的药品销售管理系统的设计与实现

    基于SSM+VUE的药品销售管理系统 研究的背景与意义 随着互联网技术的快速发展,网络时代的到来,网络信息也将会改变当今社会.各行各业在日常企业经营管理等方面也在慢慢的向规范化和网络化趋势汇合.药店药 ...

  9. 计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码

    计算机课程设计-基于ssm+vue的物资管理系统(前后端分离)-物资出库入库管理系统java代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言:Ja ...

  10. java基于ssm+vue+elementui楼盘房屋销售系统 前后端分离

    楼盘房屋是人类居住是必须的一个环境.且因为我国城镇化比例比较高,所以当前有很多的人希望到城市购买相关的楼盘和房屋.以更方便享受城市的教育和医疗资源.也能够让需要房屋销售相关信息的人更快的获取到更加全面 ...

最新文章

  1. 转 从头到尾彻底解析Hash表算法
  2. centos redhat 6+ openldap 初级介绍
  3. Python 计算机视觉(十七)—— 基于KNN的图像分类
  4. 为什么 HashMap 常用 String 对象作 key
  5. MySQL Workbench的使用教程 (初级入门版)
  6. shell下利用运算方式编写倒计时脚本
  7. C++ 基础 弱类型语言是指不需要进行变量/对象类型声明的语言。Python属于弱类型语言
  8. XP连接网络计算机未启动服务,XP搜索不到网络提示“请启动Windows零配置(WZC)服务”的解决方法...
  9. 一步一步教你实现Emoji表情键盘
  10. 基于Proteus学习单片机系列(四)——中断
  11. root联通定制机顶盒,root 机顶盒
  12. delphi 调用带有返回值的sql SERver 2008 存储过程
  13. 浅探 进程的家族关系
  14. FFMPEG保存H264流到AVI文件中形成录像
  15. java夯实基础系列:反射
  16. 如何使图片放大后依然清晰?
  17. 国产 500mA 线性锂离子电池充电器芯片DP4057 对标LTC4057-4.2/TP4054
  18. 防御性编程(Defensive Programming)
  19. 手把手带你完成第一个 android 小程序(快递App)
  20. 超低功耗Lattice SensAI引领网络边缘人工智能设备迈向大众市场

热门文章

  1. 星三角启动的优缺点和内外接的区别
  2. 内部收益率计算公式用计算机,内部收益率计算器
  3. word论文排版插件_word论文排版自动编号设置
  4. java连接微信发送给好友信息,微信消息转发以及给指定好友发送消息
  5. Elasticsearch优化原理
  6. 剥丝抽茧|阿里面试题解读:MQ消费端遇到瓶颈该怎么办?
  7. win7,win10 显示文件扩展名
  8. chrome 插件--B站自动发弹幕
  9. 可视化布局html5
  10. 最精彩的英语学习经验总结:俺的英语之路