IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot++SpringSecurity+Thymeleaf简单学习 -> 正文阅读

[Java知识库]SpringBoot++SpringSecurity+Thymeleaf简单学习

1.pom.xml文件

thyme leaf和spring security集成用时,可能需要考虑spring boot版本,我这里用的较稳定的低版本(不同版本可能会出现不同问题很正常,遇到在记录吧)

        <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.0.7.RELEASE</spring-boot.version>
   	 	</properties>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- spring security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!-- thymeleaf模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- springsecurity 和 thyme leaf 整合包 -->
        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 -->
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
            <version>3.0.4.RELEASE</version>
        </dependency>

2.源码分析

spring security主要功能为:认证+授权
1.WebSecurityConfigurerAdapter 自定义security策略
2.AuthenticationManagerBuilder 自定义认证策略
3.EnableWebSecurity 开启WebSecurity模式

2.1WebSecurityConfigurerAdapter spring security核心配置类,只需继承该适配器覆盖默认配置即可

2.2HttpSecurity Http安全策略(链式编程)
在这里插入图片描述

@Override
    protected void configure(HttpSecurity http) throws Exception {
        // 首页所有人可以访问,功能页只有有权限的人可以访问
        // 1.添加认证 设置“/”所有人可以访问 (请求授权的规则)
        http.authorizeRequests().antMatchers("/").permitAll()
                // 1.1功能页只有vip*权限的人可以访问
                .antMatchers("/level1/**").hasAnyRole("vip1")
                .antMatchers("/level2/**").hasAnyRole("vip2")
                .antMatchers("/level3/**").hasAnyRole("vip3");
        // 2.没有权限的人默认会到登陆页面(即使没有写login页面也会跳转到内存中的login页面)
        // 2.1定制登录页 启用表单登录 默认参数为username和password 可以自定义参数
        http.formLogin().loginPage("/toLogin").loginProcessingUrl("/login").usernameParameter("account").passwordParameter("password");

        // 3.关闭csrf功能 自动开启防止网站泄露
        http.csrf().disable();
        // 4.开启注销功能(清空cookie、session)跳到首页
        http.logout().logoutSuccessUrl("/");

        // 5.开启记住我功能(记录cookie时间 默认保存2周)可自定义默认记住我
        http.rememberMe().rememberMeParameter("remember");
    }

2.3认证(可以从内存中获取数据也可以从数据库中获取数据)
在这里插入图片描述

 @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 1.从内存中获取数据(设置密码加密方式)
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                // 1.1内存中创建用户root 设置密码为root 角色为vip1 vip2 vip3 运行登陆后会抛出异常:There is no PasswordEncoder mapped for the id "null" 密码未加密
                .withUser("root")
                .password(new BCryptPasswordEncoder().encode("root"))
                .roles("vip1", "vip2", "vip3")
                .and()
                .withUser("wuqian1")
                .password(new BCryptPasswordEncoder().encode("123456"))
                .roles("vip1")
                .and()
                .withUser("wuqian2")
                .password(new BCryptPasswordEncoder().encode("12345"))
                .roles("vip2")
                .and()
                .withUser("wuqian3")
                .password(new BCryptPasswordEncoder().encode("1234"))
                .roles("vip3");
        // 1.2从数据库中获取数据
        /*User.UserBuilder users = User.withDefaultPasswordEncoder();
        auth.jdbcAuthentication().dataSource(dataSource)
                .withDefaultSchema()
                .withUser(users.username("admin").password("123456").roles("admin"))
                .withUser(users.username("user1").password("123456").roles("USER"));*/
    }

3.问题分析

3.1找不到html文件
问题描述:浏览器访问 localhost:8000 没有跳转到index默认页面
问题分析:使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容,所以无法跳转到HTML页面
解决办法:使用了@RestController注解,应该使用@Controller
在这里插入图片描述
在这里插入图片描述
3.2引用bootstrap和jQuery时
官方文档描述Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以jQuery必须放在前边
3.3There is no PasswordEncoder mapped for the id “null” 密码未加密
可以调用SpringSecurity内部定义的加密方式对密码加密,也可以调用Java内部写的
在这里插入图片描述
3.4login登陆页面,用户名密码输入成功未跳转页面,或error
http.formLogin().loginPage("/toLogin");默认匹配的是username和password参数,如果前端有修改则不会查找到
可以自定义用户名密码参数.usernameParameter(“account”).passwordParameter(“password”)
在这里插入图片描述
在这里插入图片描述
学习视频参考:B站遇见狂神说
官方文档参考:官方API文档:https://docs.spring.io/spring-security/site/docs/3.0.7.RELEASE/apidocs/
查阅资料参考:https://www.cnblogs.com/chiangchou/p/springboot-2.html#_label1

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:08:16  更:2021-09-13 09:10:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:10:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码