SpringBoot-SpringSecurity

2023-12-28 23:00:32

Spring Security 中文文档:https://springdoc.cn/spring-security/
Thymeleaf:https://www.thymeleaf.org/


依赖

<!--security-thymeleaf 前端验证-->
<!--<dependency>
	<groupId>org.thymeleaf.extras</groupId>
	<artifactId>thymeleaf-extras-springsecurity4</artifactId>
	<version>3.0.4.RELEASE</version>
</dependency>-->
<!--security-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--web-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
	<groupId>org.thymeleaf</groupId>
	<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
	<groupId>org.thymeleaf.extras</groupId>
	<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>

application.yml

spring:
  thymeleaf:
    # 关闭缓存
    cache: false
    # 视图解析配置
    prefix: classpath:/templates/
    suffix: .html

SecurityConfig.java

// 开启 WebSecurity 并交给 spring 管理
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // 授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 请求授权规则:这些请求需要校验权限
        http.authorizeRequests()
                // 所有人都能访问
                .antMatchers("/").permitAll()
                // 限定角色可以访问
                .antMatchers("/vip/1").hasRole("vip1")
                .antMatchers("/vip/2").hasRole("vip2")
                .antMatchers("/vip/3").hasRole("vip3");
        // 没有权限默认返回登录页面
        http.formLogin()
                // 定制登录页
                .loginPage("/toLogin")
                // 自定义验证参数名
                .usernameParameter("username")
                .passwordParameter("password")
                // 登录页面提交的数据从这里认证
                .loginProcessingUrl("/login");
        // 关闭跨域访问
        http.csrf().disable();
        // 开启注销功能:注销成功默认返回登录页
        http.logout().logoutSuccessUrl("/");// 返回首页
        // 开启记住我功能:生成 session 和 cookie 默认有效期 14天
        http.rememberMe().rememberMeParameter("rememberMe");
    }
    // 认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 注入数据源,从数据库认证
        // auth.jdbcAuthentication().dataSource(dataSource).withDefaultSchema().withUser("");
        // 从内存中认证
        auth.inMemoryAuthentication()
                // 设置密码加密方式
                .passwordEncoder(new BCryptPasswordEncoder())
                // 用户名、加密的密码、角色
                .withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
                // 拼接多个用户
                .and()
                .withUser("zhangsan").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
    }
}

controller

@Controller
public class RouterController {
    @RequestMapping({"/","/index"})
    public String index(){
        return "index";
    }
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "views/login";
    }
    @RequestMapping("/vip/{id}")
    public String vip(@PathVariable("id") Integer id){
        return "views/vip/vip" + id;
    }
}

文章来源:https://blog.csdn.net/h_e_l_l_o_______/article/details/135278496
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。