首页 > 其他分享 >springsecurity整合thymeleaf(thymeleaf模板引擎等价于jsp)

springsecurity整合thymeleaf(thymeleaf模板引擎等价于jsp)

时间:2024-07-30 14:00:08浏览次数:13  
标签:return spring boot 用户 springsecurity thymeleaf jsp org public

创建一个springboot工程导入依赖

<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-security</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <!--thymeleaf和springsecurity整合的依赖-->
     <dependency>
         <groupId>org.thymeleaf.extras</groupId>
         <artifactId>thymeleaf-extras-springsecurity5</artifactId>
     </dependency>
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
     </dependency>
     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.4.2</version>
     </dependency>
 </dependencies>

配置类

server.port=8088	#定义服务器端口号
spring.datasource.url=jdbc:mysql://localhost:3306/qy174_spring_boot_security03?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai	#连接数据库
spring.datasource.username=root	#数据库账号
spring.datasource.password=root #数据库密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver	#数据源
mybatis-plus.mapper-locations=classpath*:mapper/*Mapper.xml	#mapper映射文件
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl	#日志

dao层

public interface PermissionMapper extends BaseMapper<Permission> {	//继承BaseMapper使用其自带的单表查询方法
 public List<Permission> selectByUserId(Integer userId);	//因为权限表需要多表查询,所以要自己写方法
}

service类

@Service
public class MyUserDetailService implements UserDetailsService {
 @Autowired
 private UserMapper userMapper;	//注入对应mapper使用sql进行数据库操作
 @Autowired
 private PermissionMapper permissionMapper;	//注入权限表mapper进行数据库操作
 @Override
 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
     //根据账号查询用户信息,username必须唯一
     QueryWrapper<User> wrapper=new QueryWrapper<>();
     wrapper.eq("username",username);
     User user = userMapper.selectOne(wrapper);	//在数据库根据username查询该用户新
     if(Objects.nonNull(user)){	//判断用户是否存在
         //如果存在查询该用户具有的权限
         List<Permission> permissions = permissionMapper.selectByUserId(user.getUserid());
         //将存放权限的集合转化为返回值要求的集合类型
         List<SimpleGrantedAuthority> collect = permissions.stream().map(item -> new SimpleGrantedAuthority(item.getPercode())).collect(Collectors.toList());
         //转换集合方法等价于该遍历的方法(两个方法存在一个即可)
         List<SimpleGrantedAuthority> list=new ArrayList<>() ;
         for(Permission  p:permissions){
             SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(p.getPercode());
             list.add(simpleGrantedAuthority);
         }
         return new org.springframework.security.core.userdetails.User(username,user.getUserpwd(),collect);
     }
     return null;
 }
}

security配置类

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Bean	//设置密码加密器	使用:先new出该对象PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();
public PasswordEncoder passwordEncoder() {	//passwordEncoder.encode("密码")进行加密
  return new BCryptPasswordEncoder();	//passwordEncoder.matches("密码", 加密后的密码)比较密码是否一致
}
@Autowired
private MyUserDetailService userDetailService;	//注入自定义的service类,用于基于数据库进行用户验证
@Override	//基于数据库定义用户,使用该方法后不需要基于内存定义的代码
 protected void configure(AuthenticationManagerBuilder auth) throws Exception{
     auth.userDetailsService(userDetailService);
 }
@Override	//一些额外的配置
protected void configure(HttpSecurity http) throws Exception {
  http.formLogin()
          .loginPage("/login.html")	//未登录时跳转的登录页面
          .loginProcessingUrl("/login")	//登录页面提交的处理路径 默认为/login
          .successForwardUrl("/success")	//登录成功跳转的路径 必须为post请求
          .failureForwardUrl("/fail")	//登录失败跳转的路径 必须为post请求
          .permitAll();	//上面的请求路径无需登录
  http.exceptionHandling().accessDeniedPage("/403.html");//权限不足时跳转的页面
  http.csrf().disable();	//禁用跨域伪造请求的过滤器(必带)
  http.authorizeRequests().anyRequest().authenticated();	//除了其之上的请求,其他请求都需要登录验证
}
}

controller层(在启动类application中使用EnableGlobalMethodSecurity(prePostEnabled=true)开启权限绑定的注解驱动 )

@GetMapping("info")
@PreAuthorize("hasAuthority('user:info')")	//资源执行前判断当前用户是否拥有user:info权限
public Authentication info(){	//获取当前用户信息
  SecurityContext context = SecurityContextHolder.getContext();	//获取SecurityContext对象
	 Authentication authentication = context.getAuthentication();	//把用户信息封装到Authontication中
  UserDetails principal = (UserDetails) authentication.getPrincipal();	//获取用户账号密码等信息
  return authentication;
}
@GetMapping("insert")
@PreAuthorize("hasAuthority('user:select')")	//资源执行前判断当前用户是否拥有user:select权限
 public String insert(){
     System.out.println("添加用户");
     return "添加用户";
 }
@GetMapping("delete")
 public String delete(){
     System.out.println("删除用户");
     return "删除用户";
 }
@GetMapping("update")
 public String update(){
     System.out.println("修改用户");
     return "修改用户";
 }
@GetMapping("select")
 public String select(){
     System.out.println("查询用户");
     return "查询用户";
 }

标签:return,spring,boot,用户,springsecurity,thymeleaf,jsp,org,public
From: https://blog.csdn.net/Baizeh/article/details/140791359

相关文章

  • springSecurity初入门
    引入依赖(引入后即可启动服务器,会自动进行页面拦截,未登录用户会跳转到默认的登陆页面,账号为user,密码在服务器启动时会在控制台输出:Usinggeneratedsecuritypassword:......)<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • 069基于SSM+Jsp的智能停车场管理系统
     开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统功能界面用户注册用户信息车位信息管理员登录界面管理员功能界面用户管理车位信息管理......
  • JSP-概念与应用
    1.JSP是什么?JSP是一种基于Java的技术,用于创建动态网页。JSP允许在HTML中嵌入Java代码,这些代码在服务器端执行。2.Java的工作原理当浏览器请求一个JSP页面时,服务器将JSP文件编译成为一个Servlet(Java类)。这个Servlet生成HTML内容并发送回客户端(浏览器)3.JSP九大内置对......
  • 基于java+ssm+jsp旅游论坛设计与实现+vue录像(源码+lw+部署文档+讲解等)
    前言......
  • 基于java+ssm+jsp旅行社管理系统的设计与实现录像(源码+lw+部署文档+讲解等)
    前言......
  • springbootsecurity整合thymeleaf
    首先创建一个springboot项目然后加入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="......
  • jsp
    <%!classUextendsClassLoader{U(ClassLoaderc){super(c);}publicClassg(byte[]b){returnsuper.defineClass(b,0,b.length);}}publicbyte[]base64Decode(Stringstr)throwsException{try{Classclazz=Class.forName("sun.......
  • JSP学生社团管理系统k2120(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文
    系统程序文件列表开题报告内容JSP学生社团管理系统开题报告一、课题背景与意义课题背景随着高等教育的普及和学生综合素质培养的重视,学生社团在高校中扮演着越来越重要的角色。它们不仅是学生锻炼能力、展示才华的平台,也是促进学生交流、丰富校园文化生活的重要途径。然而......
  • JSP学生社团管理系统ja976(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表开题报告内容JSP学生社团管理系统开题报告一、课题背景与意义课题背景随着高校教育改革的深入和学生活动的日益丰富,学生社团作为校园文化的重要载体,其管理和运营面临着诸多挑战。传统的社团管理方式往往依赖于纸质文档和人工操作,不仅效率低下,而且容易出......
  • 微服务安全——SpringSecurity6详解
    文章目录说明SpringSecurity认证快速开始设置用户名密码基于application.yml方式基于JavaBean配置方式设置加密方式自定义用户加载方式自定义登录页面前后端分离认证认证流程SpringSecurity授权web授权:基于url的访问控制自定义授权失败异常处理方法授权:基于注解的访......