基于spring security创建基本项目框架

SpringBoot建项目步骤

建表

新建项目

(package name可以自定义,整个项目只能在该包下)

选择可能有到的依赖

(别忘了勾选SQL中的Mybatis Framework,创建项目

如果没有勾选mybatis框架,就需要手动加下面代码


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.2.0

配置数据源

将resources中的application.properties改成application.yaml并添加以下代码

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/book_manage
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

  mvc:(如果html里的静态资源路径没有static就不需要像这样配置,只是这套模板路径有static比特殊)
    static-path-pattern: /static/**

  mail:
    host: smtp.163.com(邮箱网站的smtp)
    username: 发送者用户邮箱
    password: 邮箱开启smtp和pop功能后会返回一串密码

  redis:(如果redis在本地则不需要配置)
  host:localhost:8080

创建三层

实体类、mapper(根据用户名获取密码)、service、config

@Data
public class AuthUser {
    private String username;
    private String role;
    private String password;
}
@Mapper
public interface UserMapper {
    @Select("select * from users where username = #{username}")
    AuthUser getPasswordByUsername(String username);
}
@Service
public class UserAuthService implements UserDetailsService {

    @Resource
    UserMapper mapper;

    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        AuthUser user = mapper.getPasswordByUsername(s);  //从数据库根据用户名获取密码
        if(user == null)
            throw new UsernameNotFoundException("登录失败,用户名或密码错误!");
        return User   //这里需要返回UserDetails,SpringSecurity会根据给定的信息进行比对
                .withUsername(user.getUsername())
                .password(user.getPassword())   //直接从数据库取的密码
                .roles(user.getRole())   //用户角色
                .build();
    }

}
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Resource
    UserAuthService service;
    @Resource
    DataSource dataSource;

    // 配置TokenRepository
    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
        tokenRepository.setDataSource(dataSource);
//        tokenRepository.setCreateTableOnStartup(true);     //启动时自动创建用于存储Token的表(第一次启动之后注释该行,否则报错)
        return tokenRepository;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/login").permitAll()
                .anyRequest().hasAnyRole("user","admin")
                .and()
                .formLogin()
                .loginPage("/login")
                .loginProcessingUrl("/doLogin")
                .permitAll()
                .defaultSuccessUrl("/index",true)
                .and()
                .rememberMe()
                .rememberMeParameter("remember")    //若登录表单提交remenber信息,则会被记住
                .tokenRepository(persistentTokenRepository())   //存储记住我的token
                .tokenValiditySeconds(60 * 60 * 24 * 7)  //Token的有效时间(秒)默认为14天,这里设置改为7天
                //先禁用防止跨站脚本攻击的csrf token,选择型开启
                .csrf()
                .disable()
                .cors();        //跨域时需要
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(service)
                .passwordEncoder(new BCryptPasswordEncoder());
    }
}

Original: https://www.cnblogs.com/buchizicai/p/16517461.html
Author: 不吃紫菜
Title: 基于spring security创建基本项目框架

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578708/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • GFS-Google 文件系统

    GFS分布式文件系统 简介 GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体…

    Linux 2023年6月13日
    094
  • Ubuntu18.04 显卡驱动安装(解决各种疑难杂症)

    步骤 下载驱动 准备工作 进行安装 检查安装 下载驱动 首先,我们需要从官网下载显卡驱动。 [En] First of all, we need to download the v…

    Linux 2023年5月27日
    0101
  • MacOS设置终端代理

    前言 国内的开发者或多或少都会因为网络而烦恼,因为一些特殊原因有时候网络不好的时候需要使用代理才能完成对应的操作。原来我一直都是使用斐讯路由器然后刷了梅林的固件,直接在路由器层面设…

    Linux 2023年6月14日
    096
  • 部署apache

    1、使用DockerHub镜像 [root@master ~]# mkdir httpd_dockerfile [root@master ~]# cd httpd_dockerfi…

    Linux 2023年6月13日
    0115
  • Redis中bitmap的妙用

    bitmap的使用场景使用场景一:用户签到使用场景二:统计活跃用户使用场景三:用户在线状态 Original: https://www.cnblogs.com/linjiqin/p…

    Linux 2023年5月28日
    0101
  • Linux文件属性详述

    一、文件属性信息概述 文件属性信息组成如下: 文件索引属性信息——inode编号; 文件类型权限信息; 文件链接属性信息——硬链接数; 文件属主信息——文件所有者; 文件属组属性信…

    Linux 2023年5月27日
    0103
  • ASP已老,尚能饭否?

    我对ASP的感情,跟大海一样深。我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是《毕业设计管理系统》(是不是有点绕)。在 PHP 和 ASP.NET、Java 高歌…

    Linux 2023年6月6日
    0111
  • vue过滤器和生命周期——day02

    vue之过滤器和生命周期——day02 过滤器: 概念:Vue.js 允许你自定义过滤器, 可被用作一些常见的文本格式化。过滤器可以用在两个地方: mustache 插值和 v-b…

    Linux 2023年6月7日
    0130
  • 时钟周期,机器周期和指令周期

    有些概念没有搞清楚,基础不牢呀。 保持更新;https://github.com/yaowenxu posted @2022-02-16 16:18 xuyaowen 阅读(42 …

    Linux 2023年6月14日
    0105
  • Redis启动时提示Creating Server TCP listening socket *:6379: bind: No error

    场景 启动redis-server时需要走配置文件,所以编写了bat脚本启动。 @echo off redis-server.exe redis.windows.conf exit…

    Linux 2023年5月28日
    0107
  • Redis 持久化

    相关配置 port 6379 daemonize yes logfile "6379.log" dir /data dbfilename dump-6379.r…

    Linux 2023年5月28日
    0108
  • 网络安全常见术语

    黑客帽子之分 白帽 白帽:亦称白帽黑客、白帽子黑客,是指那些专门研究或者从事网络、计算机技术防御的人,他们通常受雇于各大公司,是维护世界网络、计算机安全的主要力量。很多白帽还受雇于…

    Linux 2023年6月14日
    090
  • 如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化

    如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化 原文:How to Setup QEMU Output to Console and Automate Using …

    Linux 2023年5月28日
    0115
  • redis的另一个分支 keydb

    今天无意间发现了redis还有一个分支keydb 是多线程的,貌似在机器内核多的情况下效果比redis效果好 执行这些命令 在这之前先把redis关掉 sudo systemctl…

    Linux 2023年5月28日
    083
  • 自动升级shell

    make_version.sh ./make_version.sh 第一次提示”y/N” 表示接下来的操作是手动(y)还是自动(N); 自动(N)会为镜像自…

    Linux 2023年5月28日
    0106
  • 投票活动进行中!探讨问题:从互联网大量收集学习资料再包装成产品售卖盈利是否属于侵权违法?

    写在开篇 今天不聊某项技能的知识点,我们聊点别的。那么,到底聊啥好呢?笔者想想… 有了,这两天笔者从一个微信公众号中发现一个非常恶劣的营销行为。事情大概背景是这样的:运…

    Linux 2023年6月7日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球