package com.study.security_demo.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices;
/**
* 开启方法注解支持,我们设置prePostEnabled = true是为了后面能够使用hasRole()这类表达式
* 进一步了解可看教程:https://www.baeldung.com/spring-security-method-security
*/
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* TokenBasedRememberMeServices的生成密钥,
* 算法实现详见文档:https://docs.spring.io/spring-security/site/docs/5.1.3.RELEASE/reference/htmlsingle/#remember-me-hash-token
*/
private final String SECRET_KEY = "123456";
@Autowired
private CustomUserDetailsService customUserDetailsService;
/**
* 必须有此方法,Spring Security官方规定必须要有一个密码加密方式。
* 注意:例如这里用了BCryptPasswordEncoder()的加密方法,那么在保存用户密码的时候也必须使用这种方法,确保前后一致。
* 详情参见项目中Database.java中保存用户的逻辑
*/
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* 配置Spring Security,下面说明几点注意事项。
* 1. Spring Security 默认是开启了CSRF的,此时我们提交的POST表单必须有隐藏的字段来传递CSRF,
* 而且在logout中,我们必须通过POST到 /logout 的方法来退出用户,详见我们的login.html和logout.html.
* 2. 开启了rememberMe()功能后,我们必须提供rememberMeServices,例如下面的getRememberMeServices()方法,
* 而且我们只能在TokenBasedRememberMeServices中设置cookie名称、过期时间等相关配置,如果在别的地方同时配置,会报错。
* 错误示例:xxxx.and().rememberMe().rememberMeServices(getRememberMeServices()).rememberMeCookieName("cookie-name")
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage("/login") // 自定义用户登入页面
.failureUrl("/login?error") // 自定义登入失败页面,前端可以通过url中是否有error来提供友好的用户登入提示
.and()
.logout()
.logoutUrl("/logout")// 自定义用户登出页面
.logoutSuccessUrl("/")
.and()
.rememberMe() // 开启记住密码功能
.rememberMeServices(getRememberMeServices()) // 必须提供
.key(SECRET_KEY) // 此SECRET需要和生成TokenBasedRememberMeServices的密钥相同
.and()
/*
* 默认允许所有路径所有人都可以访问,确保静态资源的正常访问。
* 后面再通过方法注解的方式来控制权限。
*/
.authorizeRequests().anyRequest().permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403"); // 权限不足自动跳转403
}
/**
* 如果要设置cookie过期时间或其他相关配置,请在下方自行配置
*/
private TokenBasedRememberMeServices getRememberMeServices() {
TokenBasedRememberMeServices services = new TokenBasedRememberMeServices(SECRET_KEY, customUserDetailsService);
services.setCookieName("remember-cookie");
services.setTokenValiditySeconds(100); // 默认14天
return services;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
SpringBoot + SpringSecurity + Thymeleaf 入门案例,适合快速整合权限管理框架的同学,可以快速进行修改源代码实现权限控制的效果。代码是入门案例,较为简单。能够使整合更加迅速。其中搭配了前端页面进行效果显示,是SpringSecurity 的最好案例。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot + SpringSecurity + Thymeleaf 入门案例的源代码 (135个子文件)
SecurityConfig.class 5KB
UserController.class 3KB
Database.class 2KB
CustomUserDetailsService.class 2KB
UserService.class 1KB
CustomUser.class 1KB
IndexController.class 849B
ErrorController.class 833B
SecurityDemoApplication.class 741B
SecurityDemoApplicationTests.class 569B
IsUser.class 560B
IsReviewer.class 548B
IsEditor.class 542B
MyPermissions.class 523B
IsAdmin.class 512B
404.html 2KB
404.html 2KB
500.html 2KB
500.html 2KB
403.html 2KB
403.html 2KB
login.html 1KB
login.html 1KB
perm.html 1KB
perm.html 1KB
admin.html 1KB
admin.html 1KB
reviewer.html 1KB
reviewer.html 1KB
editor.html 1KB
editor.html 1KB
home.html 1KB
home.html 1KB
index.html 908B
index.html 908B
logout.html 756B
logout.html 756B
security_demo.iml 10KB
SecurityConfig.java 4KB
UserController.java 2KB
Database.java 1KB
CustomUserDetailsService.java 1KB
UserService.java 954B
CustomUser.java 582B
IsUser.java 479B
IndexController.java 471B
IsReviewer.java 463B
IsEditor.java 459B
ErrorController.java 455B
MyPermissions.java 449B
IsAdmin.java 430B
SecurityDemoApplication.java 340B
SecurityDemoApplicationTests.java 230B
application.properties 60B
application.properties 60B
workspace.xml 8KB
pom.xml 2KB
Maven__org_thymeleaf_extras_thymeleaf_extras_springsecurity5_3_0_4_RELEASE.xml 770B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_4.xml 739B
Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml 728B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_7_5.xml 716B
Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_5.xml 709B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 703B
Maven__org_springframework_boot_spring_boot_starter_security_2_7_5.xml 702B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_4.xml 698B
Maven__org_springframework_boot_spring_boot_starter_logging_2_7_5.xml 695B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_5.xml 688B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_4.xml 684B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_5.xml 681B
Maven__org_springframework_security_spring_security_crypto_5_7_4.xml 676B
Maven__org_springframework_security_spring_security_config_5_7_4.xml 676B
Maven__org_springframework_boot_spring_boot_starter_test_2_7_5.xml 674B
Maven__org_springframework_boot_spring_boot_starter_json_2_7_5.xml 674B
Maven__org_springframework_boot_spring_boot_starter_web_2_7_5.xml 667B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_68.xml 663B
Maven__org_springframework_security_spring_security_test_5_7_4.xml 662B
Maven__org_springframework_security_spring_security_core_5_7_4.xml 662B
Maven__org_springframework_security_spring_security_web_5_7_4.xml 655B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_4.xml 654B
compiler.xml 653B
Maven__com_fasterxml_jackson_core_jackson_databind_2_13_4_2.xml 647B
Maven__org_springframework_boot_spring_boot_devtools_2_7_5.xml 646B
Maven__org_thymeleaf_thymeleaf_spring5_3_0_15_RELEASE.xml 644B
Maven__org_springframework_boot_spring_boot_starter_2_7_5.xml 639B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 636B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 636B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 636B
Maven__org_junit_platform_junit_platform_engine_1_8_2.xml 629B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_68.xml 628B
Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml 618B
Maven__org_springframework_boot_spring_boot_test_2_7_5.xml 618B
Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml 618B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_68.xml 614B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 614B
misc.xml 614B
Maven__org_springframework_spring_expression_5_3_23.xml 612B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml 611B
Maven__com_fasterxml_jackson_core_jackson_core_2_13_4.xml 605B
Maven__org_mockito_mockito_junit_jupiter_4_5_1.xml 601B
Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml 597B
共 135 条
- 1
- 2
资源评论
博扬java张
- 粉丝: 236
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学生成绩管理系统-C++版本
- 吉林大学离散数学2笔记.pdf
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功