SpringBoot学习笔记 (37)

1、开启自动配置的注销的功能

//定制请求的授权规则 @Override protected void configure(HttpSecurity http) throws Exception { //.... //开启自动配置的注销的功能 // /logout 注销请求 http.logout(); }

2、我们在前端,增加一个注销的按钮,index.html 导航栏中

<a th:href="@{/logout}"> <i></i> 注销 </a>

3、我们可以去测试一下,登录成功后点击注销,发现注销完毕会跳转到登录页面!

4、但是,我们想让他注销成功后,依旧可以跳转到首页,该怎么处理呢?

// .logoutSuccessUrl("http://www.likecs.com/"); 注销成功来到首页 http.logout().logoutSuccessUrl("http://www.likecs.com/");

5、测试,注销完毕后,发现跳转到首页OK

6、我们现在又来一个需求:用户没有登录的时候,导航栏上只显示登录按钮,用户登录之后,导航栏可以显示登录的用户信息及注销按钮!还有就是,比如kuangshen这个用户,它只有 vip2,vip3功能,那么登录则只显示这两个功能,而vip1的功能菜单不显示!这个就是真实的网站情况了!该如何做呢?

我们需要结合thymeleaf中的一些功能

sec:authorize="isAuthenticated()":是否认证登录!来显示不同的页面

Maven依赖:

<!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>3.0.4.RELEASE</version> </dependency>

7、修改我们的 前端页面

导入命名空间

xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"

修改导航栏,增加认证判断

<!--登录注销--> <div> <!--如果未登录--> <div sec:authorize="!isAuthenticated()"> <a th:href="@{/login}"> <i></i> 登录 </a> </div> <!--如果已登录--> <div sec:authorize="isAuthenticated()"> <a> <i></i> 用户名:<span sec:authentication="principal.username"></span> 角色:<span sec:authentication="principal.authorities"></span> </a> </div> <div sec:authorize="isAuthenticated()"> <a th:href="@{/logout}"> <i></i> 注销 </a> </div> </div>

8、重启测试,我们可以登录试试看,登录成功后确实,显示了我们想要的页面;

9、如果注销404了,就是因为它默认防止csrf跨站请求伪造,因为会产生安全问题,我们可以将请求改为post表单提交,或者在spring security中关闭csrf功能;我们试试:在 配置中增加 http.csrf().disable();

http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求 http.logout().logoutSuccessUrl("http://www.likecs.com/");

10、我们继续将下面的角色功能块认证完成!

<!-- sec:authorize="hasRole('vip1')" --> <div sec:authorize="hasRole('vip1')"> <div> <div> <div> <h5>Level 1</h5> <hr> <div><a th:href="@{/level1/1}"><i></i> Level-1-1</a></div> <div><a th:href="@{/level1/2}"><i></i> Level-1-2</a></div> <div><a th:href="@{/level1/3}"><i></i> Level-1-3</a></div> </div> </div> </div> </div> <div sec:authorize="hasRole('vip2')"> <div> <div> <div> <h5>Level 2</h5> <hr> <div><a th:href="@{/level2/1}"><i></i> Level-2-1</a></div> <div><a th:href="@{/level2/2}"><i></i> Level-2-2</a></div> <div><a th:href="@{/level2/3}"><i></i> Level-2-3</a></div> </div> </div> </div> </div> <div sec:authorize="hasRole('vip3')"> <div> <div> <div> <h5>Level 3</h5> <hr> <div><a th:href="@{/level3/1}"><i></i> Level-3-1</a></div> <div><a th:href="@{/level3/2}"><i></i> Level-3-2</a></div> <div><a th:href="@{/level3/3}"><i></i> Level-3-3</a></div> </div> </div> </div> </div>

11、测试一下!

12、权限控制和注销搞定!

19.5、记住我

现在的情况,我们只要登录之后,关闭浏览器,再登录,就会让我们重新登录,但是很多网站的情况,就是有一个记住密码的功能,这个该如何实现呢?很简单

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpygfw.html