后端开发常见问题

本文在csdn不再更新,最新版请到这里:我的笔记

常见bug

权限问题

  • rabbitmq-service.bat start 时一定要以管理员身份进入,不然会被拒绝
  • Spring Security的AccessDenied错误,检查一下数据库有没有给用户授权并且关联角色
  • Spring Security构建 SimpleGrantedAuthority 对象的时候,角色必须以 ROLE_开头。SimpleGrantedAuthority auth = new SimpleGrantedAuthority("ROLE_"+roleMapper.findById(role.getRoleId()).getRoleCode());

版本问题

  • Java版本问题
  • 版本:commons-codec 1.12 版本能正常解密微信的消息,升级为1.13后出现了不能正常decode
  • 版本:未指定版本:Cannot resolve org.springframework.boot:spring-boot-starter-data-redis:unknown

Git

Redis

Redis-cli命令

Redis配置文件

Redis内存相关

SpringBoot中使用Redis

PostgreSQL

导入导出

定时备份数据库

Linux之坑

新建用户

  1. 新增用户:useradd -m zhangsan
  2. 设置密码:passwd zhangsan
  3. 赋予用户sudo权限:vim /etc/sudoers(需要先chmod 640 sudoers,因为该文件本来是只读的)在root ALL=(ALL) ALL 的下一行添加 : zhangsan ALL=(ALL) ALL 貌似不能在文件末尾添加,会报错
  4. 别忘了chmod 440 sudoers

改坏sudoers文件

ll命令失效

  1. 运行 vi ~/.bashrc,查看该文件里是否有alias ll='ls -l' 这样的数据,如有,将数据前的 “#” 去掉,如果没有,将 alias ll='ls -l'加进去并保存,然后运行 source ~/.bashrc 命令,即可成功
  2. 如果只做完第一步,可能重新登录后ll命令还是失效,那就需要打开(如果没有的话先创建)文件: ~/.bash_profile 。 在里面加入一行:source ~/.bashrc

Ubuntu 18.04 装环境

RabbitMq

Consul

#!/bin/bash
/usr/local/bin/consul agent -dev
  • 执行命令:chmod 777 consul.sh
  • 然后在/lib/systemd/system目录下注册一个服务,配置如下:
[Unit]
Description=consul service
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
User=root
Type=simple
WorkingDirectory=/root     #这个就是脚本所在的目录(实际配置时请删掉注释)
ExecStart=/root/consul.sh  #这个就是脚本(实际配置时请删掉注释)
TimeoutSec=30
Restart=on-failure
StartLimitInterval=350
StartLimitBurst=10

[Install]
WantedBy=multi-user.target

Postgresql

Java11-Open-jdk

  • 一句搞定:apt-get install openjdk-11-jdk

Nginx

Docker

  • 执行命令:sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 参考

Nodejs

CentOS 7.3 各种安装

安装支持ZIP的工具

安装postgresql

  • 参考:https://cloud.tencent.com/developer/article/1592808
  • 上文只作为参考,实际安装时发现postgresql-setup这个文件并不在/usr目录下,而在/usr/bin目录下
  • 初始化成功并启动服务后执行su - postgres,然后执行psql,如果成功,就表示数据库安装成功了

安装Java

安装nginx

安装consul

  • 和上文Ubuntu安装consul步骤一样

安装Docker

Win10各种安装

RabbitMQ

CentOS 7.4 配置本地yum源

Windows部署Java服务

  1. Java项目打包成jar
  2. 服务注册,参考:https://blog.csdn.net/LMGD_/article/details/106144786
  3. 注册成功后,在jar所在目录执行:net start 服务名(可能需要以管理员权限执行)
  4. 运行services.msc,确认服务是否已启动

我的xml配置

<service>
    <id>rkeService</id>
    <name>rke Service</name>
	<description>a service</description>
    <executable>java</executable>
    <arguments>-jar rkeService.jar</arguments>
	<startmode>Automatic</startmode>
    <logmode>reset</logmode>
	<logpath>C:\Users\Lenovo\Desktop\server\logs</logpath>
</service>

其他参考:https://blog.csdn.net/bighuan/article/details/83416390如果已经成功就不用看了

Spring Security

关闭Spring Security的鉴权

适用于基于spring boot+spring security+jwt的项目

  1. 在springsecurity配置类上去掉@EnableGlobalMethodSecurity注解
  2. 在springsecurity配置类的如下方法中,添加.anyRequest().permitAll();
	@Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
            .cors()//跨域资源请求开启
            .and()
            .csrf().disable() //不开启跨站请求伪造
            .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
                .accessDeniedHandler(new CustomAccessDeineHandler())
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()//拦截请求,创建FilterSecurityInterceptor,该方法用于配置权限
            .antMatchers("/swagger-ui.html").permitAll()
            .antMatchers("/teacher/login").permitAll()
            .antMatchers("/visitor/login").permitAll()
//            .anyRequest().authenticated();
            .anyRequest().permitAll();
        httpSecurity.addFilterBefore(jwtAuthorizationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }

IntelliJ IDEA上调用WCF服务

IntelliJ IDEA连接服务器上的数据库

Docker相关

Postman

如何测试含有占位符的接口?

  • 接口:@DeleteMapping(“/optionalcourse/{id}”)
  • 测试方法如下(id前加冒号):
    在这里插入图片描述

常用开发组件

RestTemplate

Apache POI

参考:

正则表达式

上传图片到服务器指定路径

接收图片的代码参考:

public String uploadFile(MultipartFile file, String path) {
        if (file.isEmpty()){
            log.error("file is empty");
            return null;
        }
        String fileName = file.getOriginalFilename();
        if (fileName == null || "".equals(fileName.trim())) return null;
        log.debug("filename: " + fileName);
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        log.debug("suffix: " + suffix);
        fileName = DateUtil.getTimeStamp() + "_" + fileName;
        log.debug("filename with timestamp: " + fileName);
        File imgFile = new File(path + fileName);
        if (!imgFile.getParentFile().exists()) {
            if (!imgFile.getParentFile().mkdirs()) { //注意mkdir()和mkdirs()区别
                log.error("mkdirs: " + imgFile.getParentFile() + "failed");
                return null;
            }
        }
        try {
            file.transferTo(imgFile);// 文件写入,必须使用绝对路径加文件名,且路径存在
        } catch (IOException e) {
            log.error(e.getMessage());
            return null;
        }
        return fileName;
    }

SpringBoot相关

@Valid

  • @Valid加在方法参数上的前提是必须在类上加@Validate才生效

参考文章:

搭建SpringBoot多模块项目

Spring Boot项目引入第三方jar包

SpringBoot配置自定义拦截器

配置https证书

Spring相关

Spring中的Bean

MybatisPlus

开发中遇到的其他问题

HTTPS证书配置

开发规范

Restful风格

Coding注意事项

  1. Reject perfectionism 拒绝完美主义
  2. Quick debug(need experience and patience)
  3. Pursue simplicity 追求简洁

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 什么是Django? Django是一个基于Python的高级Web开发框架,使用它可以轻松地创建高质量的Web应用程序。 2. 你为什么选择使用Django进行Web开发? Django具有强大的功能和可扩展性,可以帮助开发者更快地构建Web应用程序。它提供了很多有用的内置组件和功能,例如ORM、模板系统、安全性等。 3. 什么是Django的MVC模式? Django采用的是MVC(Model-View-Controller)模式,这种模式将应用程序分解为三个部分:模型、视图和控制器。模型表示数据,视图表示用户界面,控制器处理用户请求并调用相应的模型和视图。 4. 什么是Django ORM? ORM(对象关系映射)是一种将数据库数据映射到对象上的技术。Django提供了强大的ORM功能,它允许开发者使用Python代码来操作数据库,而不必编写原始的SQL语句。 5. 什么是Django的模板系统? Django的模板系统允许开发者将HTML模板与Python代码分离。它使用一种类似于Jinja2的语法来呈现动态内容,例如变量、循环和条件语句。 6. 什么是Django的间件? Django的间件是在请求和响应处理过程执行的一组插件。它们可以用于添加额外的功能,例如身份验证、缓存、日志记录等。 7. 什么是Django的信号框架? Django的信号框架是一种基于发布-订阅模式的机制,用于在应用程序处理事件。信号可以在应用程序的不同部分之间传递信息,例如在模型保存之前或之后执行某些操作。 8. 什么是Django的缓存框架? Django的缓存框架可以帮助开发者提高Web应用程序的性能。它提供了多种缓存后端,例如内存、文件、数据库等,并且可以使用装饰器或间件来缓存视图函数的输出。 9. 什么是Django的安全性功能? Django提供了多种安全性功能,例如跨站点请求伪造(CSRF)保护、跨站点脚本(XSS)防御、点击劫持防御等。开发者可以轻松地启用这些功能,以保护Web应用程序免受攻击。 10. 什么是Django的测试框架? Django的测试框架可以帮助开发者编写单元测试、功能测试和集成测试。它提供了多种测试工具和辅助函数,例如测试客户端、测试响应、测试模型等,可以帮助开发者确保应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值