带你一步步入门Spring Security

Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经

老铁们,大家好,相信还有很多朋友对于带你一步步入门Spring Security和的相关问题不太懂,没关系,今天就由我来为大家分享分享带你一步步入门Spring Security以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

自Spring Boot推出以来,Spring Boot为Spring Security提供了自动化配置解决方案,让您可以零配置使用Spring Security。

因此,一般来说,常见的安全管理技术栈的组合如下:

SSM + ShiroSpring Boot/Spring Cloud + Spring Security 请注意,这只是推荐的组合。纯粹从技术角度来说,无论怎么组合都可以运行。

我们来看看具体的用法。

1.项目创建

在Spring Boot中使用Spring Security非常简单,只需引入依赖即可:

pom.xml 中的Spring Security 依赖项:

依赖groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-security/artifactId/dependency 只要添加依赖,项目的所有接口都会自动受到保护。

2.初次体验

我们创建一个HelloController:

带你一步步入门Spring Security

@RestControllerpublic class HelloController { @GetMapping(‘/hello’) public String hello() { return ‘hello’; } }} 要访问/hello,需要登录才能访问。

当用户从浏览器发送访问/hello 界面的请求时,服务器将返回302 响应码,将客户端重定向到/login 页面。用户在/login页面登录。登录成功后,会自动跳转到/hello界面。

另外,还可以使用POSTMAN来发送请求。使用POSTMAN发送请求时,可以将用户信息放在请求头中(这样可以避免重定向到登录页面):

通过上面两种不同的登录方式,可以看出Spring Security支持两种不同的认证方式:

可以通过表单进行认证,可以通过HttpBasic

3.用户名配置

进行认证。默认情况下,登录用户名是user,密码是项目启动时随机生成的字符串。您可以从启动控制台日志中看到默认密码:

每次启动时,这个随机生成的密码都会改变。配置登录用户名/密码有三种不同的方法:

在application.properties中配置通过Java代码在内存中配置通过Java从数据库加载

3.1 配置文件配置用户名/密码

可以直接在application.properties文件中配置用户的基本信息:

spring.security.user.name=javaboyspring.security.user.password=123 配置完成后,重启项目,即可使用此处配置的用户名/密码登录。

带你一步步入门Spring Security

3.2 Java 配置用户名/密码

您还可以在Java 代码中配置用户名和密码。首先,我们需要创建一个Spring Security 配置类,集成自WebSecurityConfigurerAdapter 类,如下所示:

@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { //下面两行配置表示两个用户auth.inMemoryAuthentication() .withUser(‘javaboy’).roles( ‘admin’) .password(‘$2a$10$OR3VSksVAmCzc.7WeaRPR.t0wyCsIj24k0Bne8iKWV1o.V9wsP8Xe’) .and() .withUser(‘lisi’).roles(‘用户’).password(‘$2a$10$p1H8iWa8I4.CA .7Z8bwLjes91ZpY .rYREGHQEInNtAp4NzL6PLKxi ‘); } @BeanPasswordEncoderpasswordEncoder() { return new BCryptPasswordEncoder(); }}这里我们在configure方法中配置了两个用户。用户的密码是一个加密的字符串(明文是123),从Spring 5开始,强制对密码进行加密。如果不想加密,可以使用过期的PasswordEncoder实例NoOpPasswordEncoder,但是不建议这样做,因为毕竟不安全。

Spring Security提供了BCryptPasswordEncoder密码编码工具,可以轻松对密码进行加密和加盐。相同的明文加密的结果总是不同的,因此用户不需要保存额外的盐字段。这比Shiro方便多了。很多。

4.登录配置

对于登录界面、登录成功后的响应和登录失败后的响应,我们可以在WebSecurityConfigurerAdapter的实现类中进行配置。例如:

@Configurationpublic类SecurityConfig扩展WebSecurityConfigurerAdapter { @AutowiredVerifyCodeFilterverifyCodeFilter; @Override protected void configure(HttpSecurity http) 抛出异常{ http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class); http .authorizeRequests()//启用登录配置。antMatchers(‘/hello’).hasRole(‘admin’)//表示访问/hello界面,需要有admin角色。 anyRequest().authenticated()//表示剩余的其他接口,登录后即可访问。and(). formLogin() //定义登录页面。未登录时,访问需要登录的界面,会自动跳转到该页面。loginPage(‘/login_p’) //登录处理接口.loginProcessingUrl(‘/doLogin’ ) //定义登录时用户名的key ,默认为username .usernameParameter(‘uname’) //定义登录时用户密码的key,默认为password .passwordParameter(‘passwd’) //登录成功的处理器.successHandler(new AuthenticationSuccessHandler() { @Override public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authenticationauthentication) throws IOException, ServletException { resp.setContentType(‘application/json;charset=utf-8’); PrintWriter out=getWriter out.write(); ‘成功’); out.flush() } }) .failureHandler(new AuthenticationFailureHandler() { @Override public void onAuthenticationFailure(HttpServletRequest req, HttpServletResponse resp, AuthenticationException异常) throws IOException, ServletException { resp.setContentType(‘application/json ;字符集=utf-8’); PrintWriter out=resp.getWriter(); out.write(‘失败’);出.flush(); } }) .permitAll()//表单登录相关的所有接口都直接通过.and() .logout() .logoutUrl(‘/logout’) .logoutSuccessHandler(new LogoutSuccessHandler() { @Override public void onLogoutSuccess(HttpServletRequest req , HttpServletResponse resp,身份验证)抛出IOException,ServletException { resp.setContentType(‘application/json;charset=utf-8’); PrintWriter out=resp.getWriter(); out.冲洗(); } })。 PermitAll() .and() .httpBasic() .and() .csrf().disable();我们可以在successHandler 方法中配置登录成功的回调。如果前端和后端分开开发,登录成功后返回JSON即可。同样,failureHandler方法配置登录失败的回调,logoutSuccessHandler方法配置注销成功的回调。

5.忽略拦截

如果某个请求地址不需要拦截,有两种方法可以实现:

用户评论

带你一步步入门Spring Security
入骨相思

终于找到这篇博文了!一直想学习Spring Security,感觉入门教程都比较难理解,这篇文章讲解特别详细,图文并茂,简直是我的福音呀!希望能多更新一些实战经验分享!

    有18位网友表示赞同!

带你一步步入门Spring Security
安之若素

这个标题看着很吸引人,期待能学到点东西。不过作为小白,能不能再解释一下某些关键概念?比如,授权和认证的区别等等…

    有14位网友表示赞同!

带你一步步入门Spring Security
不相忘

写的不错,入门篇刚好适合我的水平。感觉学习Spring Security最重要的还是理解其核心设计理念,这篇文章也比较透彻地解释了这个部分。

    有15位网友表示赞同!

带你一步步入门Spring Security
玻璃渣子

教程的讲解很清晰易懂,终于明白什么是URL拦截、过滤器以及各种策略配置的区别了! 不过希望能分享一些实际项目中应用案例,这样更加直观,更能帮助我理解和记忆。

    有18位网友表示赞同!

带你一步步入门Spring Security
空谷幽兰

Spring Security真是太复杂了!这篇文章讲了一个入门的小步骤,但感觉还是比较浅显。希望作者能出一篇深入的讲解,比如如何解决跨域问题、使用 JWT 进行认证等等。

    有13位网友表示赞同!

带你一步步入门Spring Security
神经兮兮°

这个标题点明白了文章内容,直接切入主题,很实用!我之前尝试过学习 Spring Security,但是各种坑总是让我退缩…..希望能通过这篇文章找到解决方案!

    有20位网友表示赞同!

带你一步步入门Spring Security
万象皆为过客

学习Spring Security确实不容易,需要仔细研究代码才能真正理解。不过这篇入门篇写的不错,可以作为基础入门了解框架的基本结构和主要功能。

    有5位网友表示赞同!

带你一步步入门Spring Security
厌归人

感觉这篇文章太过于“手把手”了,缺乏思考和总结的空间。希望能提供一些更高的维度讲解,比如 Spring Security 与其他安全方案的对比分析等等。

    有12位网友表示赞同!

带你一步步入门Spring Security
青楼买醉

我是Java后端开发人员,一直想学习Spring Security来保障网站的安全。这篇入门教程讲解的很详细,特别是对Web安全概念的解释很清晰易懂。 应该能帮到很多跟我一样想要了解春节 security 的小伙伴!

    有6位网友表示赞同!

带你一步步入门Spring Security
青衫故人

对于已经有一定的 Spring 开发经验的人来说,这篇文章可能太基础了,不过对于刚开始接触 Spring Security 的人来说还是很有帮助的。

    有20位网友表示赞同!

带你一步步入门Spring Security
青墨断笺み

好文章! endlich ein einfaches Tutorial für Sicherheit in der Verwendung von Spring!

    有17位网友表示赞同!

带你一步步入门Spring Security
糖果控

这篇文章讲得有点理论化,缺乏实战经验分享。比如如何配置不同的认证方式,如何进行资源控制等等,这些场景模拟会更加实用!

    有11位网友表示赞同!

带你一步步入门Spring Security
玩味

感觉作者对Spring Security的理解还是比较浅薄的,一些关键点没有深入讲解。希望作者能进一步完善文章内容!

    有11位网友表示赞同!

带你一步步入门Spring Security
安好如初

这篇博文的图片说明很清晰,帮助我快速理解了一些概念! Spring Security 的配置确实有点复杂,需要不断练习才能掌握。

    有16位网友表示赞同!

带你一步步入门Spring Security
情字何解ヘ

作者加油, 这种详细的步骤讲解对于入门者来说非常珍贵!希望之后可以分享一些案例代码,更方便我们学习和实践!

    有19位网友表示赞同!

带你一步步入门Spring Security
歆久

希望能再增加一些关于 Spring Security 的最佳实践分享,比如如何进行安全漏洞扫描、如何进行定期安全风险评估等等。

    有7位网友表示赞同!

带你一步步入门Spring Security
一个人的荒凉

Spring Security 知识点丰富且更新快,这篇文章入门篇能把核心的概念概括了,后续可以多多关注作者发出的文章!

    有14位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118554.html

(0)
小su's avatar小su
上一篇 2024年9月1日 上午10:55
下一篇 2024年9月1日 上午11:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注