要将前端传过来的密码进行某种方式加密,否则就无法登录,修改代码
/**
-
配置认证规则
-
@param auth
-
@throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 在内存中定义,也可以在jdbc中去拿
auth.inMemoryAuthentication()
.passwordEncoder(new BCryptPasswordEncoder())
.withUser(“tuwer”).password(new BCryptPasswordEncoder().encode(“123456”)).roles(“vip2”,“vip3”)
.and()
.withUser(“root”).password(new BCryptPasswordEncoder().encode(“123456”)).roles(“vip1”,“vip2”,“vip3”)
.and()
.withUser(“guest”).password(new BCryptPasswordEncoder().encode(“123456”)).roles(“vip1”);
}
测试:登录成功,并且每个角色只能访问自己认证下的规则!
===================================================================
@Override
protected void configure(HttpSecurity http) throws Exception {
// …
// 开启自动配置的注销的功能
// /logout 注销请求
http.logout();
}
注销
测试:注销完毕会跳转到登录页面!
// .logoutSuccessUrl(“/”); 注销成功来到首页
http.logout().logoutSuccessUrl(“/”);
前端只显示与当前用户匹配的内容;当前用户没有权限访问的内容不显示
需要结合 thymeleaf 中的一些功能
sec:authorize="isAuthenticated()"
表示已认证登录!
(1)导入依赖
注意版本问题;有些版本在thymeleaf中不支持
thymeleaf-extras-springsecurity5
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
3.0.4.RELEASE
(2)修改前端
- 命名空间
xmlns:sec=“http://www.thymeleaf.org/thymeleaf-extras-springsecurity5”
- 权限控制
登录
用户名:
角色:
注销
sec:authentication = "principal.username"
登录用户名字
sec:authentication = "principal.authorities"
登录用户的权限
如果注销后,出现404,就是因为它默认防止csrf跨站请求伪造,因为会产生安全问题
- 可以将请求改为post表单提交
- 或者在spring security中关闭csrf功能;在配置中增加
http.csrf().disable();
// 关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求
http.csrf().disable();
// 注销
http.logout().logoutSuccessUrl(“/”);
===============================================================
/**
-
配置授权规则
-
@param http
-
@throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// …
// 记住我
http.rememberMe();
}
登录页多了一个记住我功能,登录之后关闭浏览器,然后重新打开浏览器访问,发现用户依旧存在!
登录成功后,将cookie发送给浏览器保存,以后登录带上这个cookie,只要通过检查就可以免登录了。如果点击注销,则会删除这个cookie
cookie 默认保留14天(即两周)
表示总是记住;为 true 时,不管用户是否勾选记住我,都会记住;即使没有勾选,也会创建cookie;默认有效期仍然是14天
=================================================================
http.formLogin().loginPage(“/toLogin”);
登录
1) 和 2)中都指向自定义的登录页
表单必须是 post 方式
默认的用户名名称:
username
,密码名称:password
如果自定义的用户名名称和密码名称与默认的不一致,可以通过如下方式指定
如:用户名 name,密码:ps
http.formLogin()
.loginPage(“/toLogin”)
.usernameParameter(“name”)
.passwordParameter(“ps”);
处理登录页表单数据的地址,也就是表单要提交的地址
/toLogin
登录页地址
/login
表单提交地址
http.formLogin()
.loginPage(“/toLogin”)
.usernameParameter(“name”)
.passwordParameter(“ps”)
.loginProcessingUrl(“/login”);
- 前端登录页
记住我
- 后端
http.rememberMe()
// 定制记住我的参数!
.rememberMeParameter(“remember”);
=================================================================
package com.tuwer.config;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
2、Redis学习笔记及学习思维脑图
3、数据面试必备20题+数据库性能优化的21个最佳实践
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
5)]
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
[外链图片转存中…(img-UUBs3lr3-1712687604495)]
2、Redis学习笔记及学习思维脑图
[外链图片转存中…(img-zoJzTn31-1712687604496)]
3、数据面试必备20题+数据库性能优化的21个最佳实践
[外链图片转存中…(img-bDzmpNWQ-1712687604496)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-A3NlpuZf-1712687604496)]