首页 > 其他分享 >springsecurity 认证,授权,注销,动态菜单,记住我和首页定制

springsecurity 认证,授权,注销,动态菜单,记住我和首页定制

时间:2023-05-07 14:22:55浏览次数:55  
标签:菜单 登录 5.7 spring springframework springsecurity 首页 org security

搭建环境:

1.在创建springboot时选择组件web,thymeleaf,spring-security

2.导入静态资源,导入后测试一下环境

 认证和授权

继承类WebSecurityConfigurerAdapter,重写方法configure

若遇到报错:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:289) ~[spring-security-crypto-5.7.8.jar:5.7.8]
at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:237) ~[spring-security-crypto-5.7.8.jar:5.7.8]
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$LazyPasswordEncoder.matches(WebSecurityConfigurerAdapter.java:616) ~[spring-security-config-5.7.8.jar:5.7.8]
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:77) ~[spring-security-core-5.7.8.jar:5.7.8]
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:147) ~[spring-security-core-5.7.8.jar:5.7.8]
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182) ~[spring-security-core-5.7.8.jar:5.7.8]
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201) ~[spring-security-core-5.7.8.jar:5.7.8]
at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(

是因为设置的密码没有加密啊,springsecurity5.0+要求对密码加密,因为不加密很容易被反编译,造成信息泄露

代码:

@EnableWebSecurity
public class SecurityConfig  extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) throws Exception {
        //首页all可以访问,功能页对应vip能访问
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");
        //没有权限默认跳到登录页面,默认开启登录的页面
        http.formLogin();

    }
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
       auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
               .withUser("kuangshen").password(new BCryptPasswordEncoder().encode("123")).roles("vip2","vip3")
               .and()
               .withUser("ROOT").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
               .and()
               .withUser("GUEST").password(new BCryptPasswordEncoder().encode("12")).roles("vip3");
    }
}

 

 

注销

要求实现:未登录:只显示登录按钮,登录时 显示登陆角色和注销按钮

前端代码要做的事情是验证,需要导入整合thymeleaf和springsecurity的依赖

<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>

前端代码:

前端判断:如果用户未登录(!isAuthenticated()),那要跳到登录页面,如果用户是登录的,定制首页要展示出用户的角色(vip1?vip2?vip3?),和注销图标

 运行结果:

 

动态菜单

动态菜单:不同角色登录看到的内容不同

前端代码:

只需要在每个功能模块前面添加判断是什么角色

运行结果:

可以看到用户kuangshen角色是vip2和vip3,因此可以看到对应的两个功能模块Level2和Level3

 记住我

记住我的本质是在用户访问时增加cookie

在前端添加:

 

在secruityconfig开启:

 

首页定制

我们不想继续使用springsecurity5提供的登录页面了,因此我们自定义了一个login.html,我们希望之后按登录按钮时跳转到自己定制的登录页面

在RouterController中,"views/login"对应的是/toLogin,在index.html页面请求的/toLogin经过这条语句会跳转到“views/login",在login.html面请求的/toLogin经过这条语句表单提交到index.html; 因此这里的/toLogin和index.html的/toLogin和login。html的/toLogin要完全一致,不然会报404

 login.html

 index.html

 

标签:菜单,登录,5.7,spring,springframework,springsecurity,首页,org,security
From: https://www.cnblogs.com/MyBlogs-joyiyii/p/17378983.html

相关文章

  • 微信小程序生态13-微信公众号自定义菜单配置
    自定义菜单微信公众号分为订阅号和服务号两种,虽然二者很大的不同,但是这两种公众号的底部却是差不多的:都有菜单栏,而且这些底部菜单也都是自定义配置的。如CSDN的官方公众号的底部就有精彩栏目、新程序员、CSDN等菜单:微信公众号菜单栏的配置需要登录『微信公众平台』并选择公众......
  • 【Vue】vue3 vue-pdf-embed 实现pdf预览、缩放、拖拽、旋转和左侧菜单选择
    实际效果安装插件pnpminstallvue-pdf-embedpnpminstallvue3-pdfjs左侧pdf菜单组件<template><divclass="pdf-view-list"><divclass="itemactive-item"v-for="(item,index)inpageTotalNum"@click="itemClcik(i......
  • 关于菜单-角色-用户那点事
    1.菜单,一般菜单都会有好几级,通常每一级都基本上不会超过10,在菜单表里面我们可以这样设计,首先第一个关键字段上级菜单,这个字段用来确定这个菜单是属于哪个菜单的子菜单,顶级的话就是空了。第二个关键字段就是主键了,这里不要用自增的形式,这里我们可以按照我们的需要自己定义,比如第一......
  • C菜单响应程序
    C菜单响应程序需求:提供一个响应程序用户输入正确得到响应用户输入错误重新输入注意:混合字符和数值输入可以识别处理用户输入Enter键示例代码:/***@Author:Lucifer*@Date:5/1/2023,2:43:11PM*@LastEditors:Lucifer*@LastEditTime:5/1/2023,2:43:......
  • FreeCodeCamp-通过编写咖啡店菜单学习CSS
    index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>CafeMenu......
  • 推荐一个基于.Net Framework开发的Windows右键菜单管理工具
    平常在我们电脑,我们都会安装非常多的软件,很多软件默认都会向系统注册右键菜单功能,这样方便我们快捷打开。比如图片文件,通过右键的方式,快捷选择PS软件打开。如果我们电脑安装非常多的软件,就会导致我们右键菜单的列表非常多,但是很多软件我们是用不到的。所以,今天给大家推荐一个Win......
  • SpringSecurity简介
    ------------恢复内容开始------------SpringSecurity简介SpringSecurity是spring家族中的一个安全框架,相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富一般来说中大型的项目都是使用springsecurity来做安全框架,小项目有Shiro的比较多,因为相比与Spri......
  • SpringSecurity过滤器之UsernamePasswordAuthenticationFilter
    UsernamePasswordAuthenticationFilter处理表单登录及认证。AbstractAuthenticationProcessingFilter#doFilterprivatevoiddoFilter(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainchain) throwsIOException,ServletException{ if(!requires......
  • SpringSecurity过滤器之LogoutFilter
    LogoutFilter用于注销登录。privatevoiddoFilter(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainchain) throwsIOException,ServletException{ if(requiresLogout(request,response)){ Authenticationauth=SecurityContextHolder.getC......
  • SpringSecurity过滤器之DefaultLoginPageGeneratingFilter
    DefaultLoginPageGeneratingFilter用于生成默认登录页。privatevoiddoFilter(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainchain) throwsIOException,ServletException{ booleanloginError=isErrorPage(request); booleanlogoutSuccess......