手把手带你入门 Spring Security!,java面试题及答案整理

  • 通过 Java 代码配置在内存中

  • 通过 Java 从数据库中加载

前两种比较简单,第三种代码量略大,本文就先来看看前两种,第三种后面再单独写文章介绍,也可以参考我的微人事项目

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


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

spring.security.user.name=javaboy

spring.security.user.password=123

配置完成后,重启项目,就可以使用这里配置的用户名/密码登录了。

3.2 Java 配置用户名/密码


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

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

//下面这两行配置表示在内存中配置了两个用户

auth.inMemoryAuthentication()

.withUser(“javaboy”).roles(“admin”).password(“$2a 10 10 10OR3VSksVAmCzc.7WeaRPR.t0wyCsIj24k0Bne8iKWV1o.V9wsP8Xe”)

.and()

.withUser(“lisi”).roles(“user”).password(“$2a 10 10 10p1H8iWa8I4.CA.7Z8bwLjes91ZpY.rYREGHQEInNtAp4NzL6PLKxi”);

}

@Bean

PasswordEncoder passwordEncoder() {

return new BCryptPasswordEncoder();

}

}

这里我们在 configure 方法中配置了两个用户,用户的密码都是加密之后的字符串(明文是 123),从 Spring5 开始,强制要求密码要加密,如果非不想加密,可以使用一个过期的 PasswordEncoder 的实例 NoOpPasswordEncoder,但是不建议这么做,毕竟不安全。

Spring Security 中提供了 BCryptPasswordEncoder 密码编码工具,可以非常方便的实现密码的加密加盐,相同明文加密出来的结果总是不同,这样就不需要用户去额外保存的字段了,这一点比 Shiro 要方便很多。

4.登录配置

=================================================================

对于登录接口,登录成功后的响应,登录失败后的响应,我们都可以在 WebSecurityConfigurerAdapter 的实现类中进行配置。例如下面这样:

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

VerifyCodeFilter verifyCodeFilter;

@Override

protected void configure(HttpSecurity http) throws Exception {

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, Authentication authentication) throws IOException, ServletException {

resp.setContentType(“application/json;charset=utf-8”);

PrintWriter out = resp.getWriter();

out.write(“success”);

out.flush();

}

})

.failureHandler(new AuthenticationFailureHandler() {

@Override

public void onAuthenticationFailure(HttpServletRequest req, HttpServletResponse resp, AuthenticationException exception) throws IOException, ServletException {

resp.setContentType(“application/json;charset=utf-8”);

PrintWriter out = resp.getWriter();

out.write(“fail”);

out.flush();

}

})

.permitAll()//和表单登录相关的接口统统都直接通过

.and()

.logout()

.logoutUrl(“/logout”)

.logoutSuccessHandler(new LogoutSuccessHandler() {

@Override

public void onLogoutSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException, ServletException {

resp.setContentType(“application/json;charset=utf-8”);

PrintWriter out = resp.getWriter();

out.write(“logout success”);

out.flush();

}

})

.permitAll()

.and()

.httpBasic()

.and()

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

image

补缺

[外链图片转存中…(img-uZMjkroO-1711036601520)]

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

[外链图片转存中…(img-PKlDXGss-1711036601521)]

[外链图片转存中…(img-ySZnJ3iB-1711036601521)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值