前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于spring security创建基本项目框架

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

作者头像
不吃紫菜
发布2022-08-18 15:15:25
1710
发布2022-08-18 15:15:25
举报
文章被收录于专栏:每日一Java,进步一点点

SpringBoot建项目步骤

建表

新建项目

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

选择可能有到的依赖

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

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

代码语言:javascript
复制
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

配置数据源

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

代码语言:javascript
复制
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

代码语言:javascript
复制
@Data
public class AuthUser {
    private String username;
    private String role;
    private String password;
}
代码语言:javascript
复制
@Mapper
public interface UserMapper {
    @Select("select * from users where username = #{username}")
    AuthUser getPasswordByUsername(String username);
}
代码语言:javascript
复制
@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();
    }
    
    
}
代码语言:javascript
复制
@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());
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot建项目步骤
    • 建表
      • 新建项目
        • 选择可能有到的依赖
          • 配置数据源
            • 创建三层
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档