SpringBoot Security安装配置及Thymeleaf整合

 更新时间:2020年12月04日 08:36:11   作者:人间有妖气  
这篇文章主要介绍了SpringBoot Security安装配置及Thymeleaf整合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

功能:解决web站点的登录,权限验证,授权等功能

优点:在不影响站点业务代码,可以权限的授权与验证横切到业务中

1、要添加的依赖

<!--thymeleaf-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!--security 和 thymeleaf 整合包-->
    <dependency>
      <groupId>org.thymeleaf.extras</groupId>
      <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    </dependency>
    <!--web-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--security-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

2、Security 下授权与验证的简单配置(Security下有登录,注销,记住我等功能,可以快速集成到自己的login页上)
Tis:如果template页中使用了 Frame页,默认是不能访问的,需要添加 http.headers().frameOptions().sameOrigin();

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  //授权
  @Override
  protected void configure(HttpSecurity http) throws Exception {

    //请求授权的规则
    http.authorizeRequests()
        //.antMatchers("/tologin").permitAll() //登录页所有人都可以访问
        //.antMatchers("/admin/**").hasRole("admin1")
        .antMatchers("/admin/list").hasRole("admin1")
        .antMatchers("/admin/role").hasRole("admin1")
        .antMatchers("/admin/cate").hasRole("admin2")
        .antMatchers("/admin/rule").hasRole("admin2");

    // 项目里面使用了springSecurity spring Security下,X-Frame-Options默认为DENY,非spring Security环境下,X-Frame-Options的默认大多也是DENY,这种情况下,浏览器拒绝当前页面加载任何Frame页面
    http.headers().frameOptions().sameOrigin();

    //登录页(Security默认有一个登录页)
    http.formLogin().permitAll()
        .loginPage("/tologin") //指定自定义的登录页地址
        .successForwardUrl("/admin/index") //登录成功跳转地址
        .usernameParameter("username").passwordParameter("password");//匹配自定义登录页的name元素名称

    // 开启注销功能,跳转到登录页
    http.csrf().disable(); //退出失败可能能的原因
    http.logout().logoutSuccessUrl("/tologin");

    //开启记住我功能,cookie 默认保存14天
    http.rememberMe()
        .rememberMeParameter("remember");//匹配自定义登录页的name元素名称

  }

  //认证
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .passwordEncoder(new BCryptPasswordEncoder())//密码加密方式(有些版本的Security必须要指定)
        .withUser("root").password(new BCryptPasswordEncoder().encode("123")).roles("admin1","admin2","admin3")
        .and()
        .withUser("yeqiu").password(new BCryptPasswordEncoder().encode("123")).roles("admin1")
        .and()
        .withUser("admin").password(new BCryptPasswordEncoder().encode("123")).roles("admin2");

  }
}

3、Security 和 Thymeleaf 页面整合(添加依赖:thymeleaf-extras-springsecurity)

<!--加入约束-->
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">

<!--
  sec:authorize="isAuthenticated()" 用户是否登录
  sec:authorize="hasAnyRole('admin1')" 是否具有某个角色
  sec:authentication="name" 当前登录用户
  sec:authentication="principal.authorities" 当前用户全部角色
-->

<div sec:authorize="isAuthenticated()">
  <h2><span sec:authentication="name"></span>,您好 您的身份是
    <span sec:authentication="principal.authorities"></span>
  </h2>
</div>

<li sec:authorize="hasRole('admin2')">
   <a onclick="xadmin.add_tab('权限管理','admin/rule')">
      <cite>权限管理</cite>
   </a>
</li>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 将本地JAR文件手动添加到Maven本地仓库的实现过程

    将本地JAR文件手动添加到Maven本地仓库的实现过程

    在Java开发中,使用Maven作为项目管理工具已经成为了主流的选择,Maven提供了强大的依赖管理功能,可以轻松地下载和管理项目所需的库和工具,在某些情况下,你可能会需要将本地下载的JAR文件手动添加到Maven的本地仓库中,这篇博客将详细介绍如何实现这一过程
    2024-10-10
  • 详解Java如何有效避免空指针

    详解Java如何有效避免空指针

    空指针,也就是NullPointerException 简称NPE的,怕一下子写出NPE,部分的伙伴看不懂,索性就改成了空指针,在实际的开发中,我们最讨厌的就是遇到空指针了,业务跑着跑着发现了空指针,所以本文详细介绍了Java如何有效的避免空指针,需要的朋友可以参考下
    2023-12-12
  • MyBatis-Plus updateById更新不了空字符串或null的解决方法

    MyBatis-Plus updateById更新不了空字符串或null的解决方法

    本文主要介绍了MyBatis-Plus updateById更新不了空字符串或null的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 面试官:详细谈谈Java对象的4种引用方式

    面试官:详细谈谈Java对象的4种引用方式

    这篇文章主要给大家介绍了java面试官常会问到的,关于Java对象的4种引用方式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • java执行shell并获取shell输出日志方式

    java执行shell并获取shell输出日志方式

    这篇文章主要介绍了java执行shell并获取shell输出日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java编写实现登陆窗口

    Java编写实现登陆窗口

    这篇文章主要为大家详细介绍了Java编写实现登陆窗口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Springboot 整合RabbitMq(用心看完这一篇就够了)

    Springboot 整合RabbitMq(用心看完这一篇就够了)

    这篇文章主要介绍了Springboot 整合RabbitMq(用心看完这一篇就够了),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java网上图书商城(4)购物车模块1

    java网上图书商城(4)购物车模块1

    这篇文章主要为大家详细介绍了java网上图书商城,购物车模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 基于Java利用static实现单例模式

    基于Java利用static实现单例模式

    这篇文章主要介绍了基于Java利用static实现单例模式,当在多个线程同时触发类的初始化过程的时候static不会被多次执行,下面我们一起进入文章看看具体要的原因
    2022-01-01

最新评论