安航云cms系统面试话术

权限管理

经典权限五张表

在这里插入图片描述

用户管理(为用户分配角色)

查询cms管理员列表

  1. cms_manager(系统用户表,id是自增那种,不是mysql的自增,是1,2,3,4这种,每次新增都降序取第一个id,然后加1)
  • 根据姓名和用户名称查询,条件是没有被删除的,核心字段is_delete
  • 新增,涉及密码加密
  1. 分配角色,
  • 系统角色表(cms_role),核心字段:name(角色名称),description(角色描述)
    角色有:超级管理员,
  • 系统用户角色关联表(cms_manager_role),
    核心字段:manager_id(系统用户id),role_id(角色id)
    3.角色管理
  • 分配权限,role_permission(系统角色权限关联表)
    核心字段:role_id(角色ID),permission_id(权限ID)
  1. 菜单管理(权限管理)
    cms_permission(系统权限表),
    核心字段:name(权限名称),description(权限描述),url(权限页面(url),springmvc的请求的全路径)

springSecurity密码加密解密工具类

package com.aihangyun.cms.util;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;
import java.util.HashMap;
import java.util.Map;


public class EncryptUtil {

	// 从配置文件中获得
	private static final PasswordEncoder encoder = DefaultPasswordEncoderFactories.createDelegatingPasswordEncoder();

	// 加密方法
	public static String encrypt(String rawPassword) {
		return encoder.encode(rawPassword);
	}

	// 解密方法
	public static boolean match(String rawPassword, String password) {
		return encoder.matches(rawPassword, password);
	}

	private static class DefaultPasswordEncoderFactories {

		// java注解,不检测过期的方法
		@SuppressWarnings("deprecation")
		static PasswordEncoder createDelegatingPasswordEncoder() {
			String encodingId = "MD5";
			// 代码 encoders 的 Map 包含了很多种密码编码器,有 ldap 、MD4 、 MD5 、noop 、pbkdf2 、scrypt 、SHA-1 、SHA-256
			Map<String, PasswordEncoder> encoders = new HashMap<>();
			// 静态工厂方法可以看出,默认是创建并返回一个 BCryptPasswordEncoder,
			// 同时该 BCryptPasswordEncoder( PasswordEncoder 子类)也是 Spring Security 推荐的默认密码编码器,其中 noop 就是不做处理默认保存原密码。

			// 一般我们代码中 @Autowired 注入并使用 PasswordEncoder 接口的实例,
			// 然后调用其 matches 方法去匹配原密码和数据库中保存的“密码”;密码的校验方式有多种,从 PasswordEncoder 接口实现的类是可以知道。
			encoders.put(encodingId, new BCryptPasswordEncoder());
			encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());
			encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());
			encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));
			encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());
			encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
			encoders.put("scrypt", new SCryptPasswordEncoder());
			encoders.put("bcrypt", new BCryptPasswordEncoder());
			encoders.put("SHA-1",
					new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));
			encoders.put("SHA-256",
					new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));
			encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder());

			return new DelegatingPasswordEncoder(encodingId, encoders);
		}
	}
}

角色管理(为用户分配权限)

权限管理(菜单管理,到达每个页面的url)

yml文件

server:
  port: 8081
  tomcat:
    #最大工作线程数,默认200, 48g内存,线程数经验值800
    #操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。
    max-threads: 600 # Maximum amount of worker threads.
    # 最小工作空闲线程数,默认10, 适当增大一些,以便应对突然增长的访问量
    min-spare-threads: 100 # Minimum amount of worker threads.
    # 官方文档的说明为:当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。
    # 当队列已满时,任何的连接请求都将被拒绝。accept-count的默认值为100。
    # 详细的来说:当调用HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,
    # 这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。
    # 如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。
    accept-count: 700
    # 前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败。
    # 即:请求数据量过大,超出了最大阈值。
#    max-http-post-size: -1

spring:
  application:
    name: info-cms
  profiles:
    active: ${environment}
    include:
  security:
    user:
      name: jason
      password: jason
  datasource:
  # springBoot默认数据源
    type: com.zaxxer.hikari.HikariDataSource
    #    url: jdbc:mysql://${DB_HOST}:${DB_PORT:3306}/info?useUnicode=true&characterEncoding=utf-8
    #    driver-class-name: com.mysql.jdbc.Driver
    #    username: ${DB_USERNAME}
    #    password: ${DB_PASSWORD}
    #    url: jdbc:mysql://${DB_HOST:172.19.134.132}:${DB_PORT:4006}/info?useUnicode=true&characterEncoding=utf-8
    #    driver-class-name: com.mysql.jdbc.Driver
    #    username: ${DB_USERNAME:test}
    #    password: ${DB_PASSWORD:aiHungG#$%687}
    #    url: jdbc:mysql://${DB_HOST:test.aihangcloud.cn}:${DB_PORT:3306}/info?useUnicode=true&characterEncoding=utf-8
    #    driver-class-name: com.mysql.jdbc.Driver
    #    username: ${DB_USERNAME:test}
    #    password: ${DB_PASSWORD:test}
    #    url: jdbc:mysql://${DB_HOST:db2.aihangxunxi.com}:${DB_PORT:3306}/info?useUnicode=true&characterEncoding=utf-8
    #    driver-class-name: com.mysql.jdbc.Driver
    #    username: ${DB_USERNAME:test}
    #    password: ${DB_PASSWORD:aiHungG#$%687}
    #    url:  jdbc:mysql://test.aihangcloud.cn:3306/info?useUnicode=true&characterEncoding=utf-8
    #    driver-class-name: com.mysql.jdbc.Driver
    #    username: test
    #    password: test
    url: ${info.db.jdbc.url}
    driver-class-name: org.mariadb.jdbc.Driver
    username: ${info.db.jdbc.username}
    password: ${info.db.jdbc.password}
    hikari:
      maxLifetime: 1765000 #一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒以上
      maximumPoolSize: 15 #连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
      # 用户登录设备后如果长时间没有进行操作,将一直占用此用户界面,造成资源的浪费,可以配置此命令将长时间连接始终处于空闲状态,系统将自动断开该连接。
      # 缺省情况下,用户连接的超时时间是10分钟;通常情况下,推荐设置用户界面断连的超时时间在1015分钟之间,具体情况视情况而定。
      idle-timeout: 100000
      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
  data:
    mongodb:
      uri: ${info.mongo.uri}
      username:
      password:
  redis:
    database: 0
    host: ${info.auth.redis.host}
    port: ${info.auth.redis.port}
    password:
  #banner
  banner:
    location: banner-girl.txt
  #freemarker
  freemarker:
    cache: false
    charset: utf-8
    suffix: .ftl
    template-loader-path: classpath:/templates/
    settings:
      # auto_import正确批量加载freemarker宏定义的方法
      # 前几天自己写freemarker的宏的时候,总是加载不上宏标签
      # https://my.oschina.net/Tonyjingzhou/blog/510026
      # 不太懂,有时间研究研究
      auto_import: /spring.ftl as spring
  #servlet配置
  servlet:
    multipart:
    # 支持多文件上传
      enabled: true
      # 有时间研究这个参数
      file-size-threshold: 0
      max-file-size: 5MB
      max-request-size: 10MB
      # https://www.cnblogs.com/cyh706510441/p/8855320.html
      # dzh,有时间研究
      resolve-lazily: false
  #国际化i18n
  messages:
    basename: i18n/messages
    encoding: UTF-8
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8


#mybatis
mybatis:
  #pojo别名扫描包
  type-aliases-package: com.aihangyun.cms.domain
  type-handlers-package: com.aihangyun.cms.common.enums.handler


##eureka
#eureka:
#  client:
#    serviceUrl:
#      defaultZone: http://localhost:8761/eureka/


logging:
#  config: classpath:config/log4j2-dev.xml
  level:
    com.aihangyun.cms.repository: debug
# 自定义变量

## File Storage Properties
file:
  upload-dir: './uploads'

chat:
  host: dev.aihangcloud.cn
  login: http://dev.aihangcloud.cn:8092/user/login
  push: http://dev.aihangcloud.cn:8092/tigase/push2users
  ip: 172.19.26.7

#chat:
#  host: dev.aihangcloud.cn
#  login: http://192.168.100.224:8092/user/login
#  push: http://192.168.100.224:8092/tigase/push2users
#  ip: 172.19.26.7


sms:  # 短信验证码
  aliyun:
    accessKeyId: LTAIHhiyEU6dgRNT
    accessKeySecret: YNxfEbW5BilcoiHrbAWhdjL89FKYmw
    code-timeout: 60000
    domain: dysmsapi.aliyuncs.com # 产品名称:云通信短信API产品,开发者无需替换
    product: Dysmsapi
    redis-namespace: 'sms:key:' # 自定义redis命名空间

#广告 info-ad
#收藏  info-favortite
#关注  info-follow
#浏览记录  info-history
#广告关键字 ad-lable
es:
  host: ${info.elasticsearch.host}
  port: 9200
  scheme: http
  infoAd: info-ad

info:
  app:
    domain: localhost:8082

从来没把老师当成男性。从不知道老师把她当成女性。

房思琪的初恋乐园
刘奕含

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值