Java最全Spring Boot2 系列教程(三十三)整合 Spring Security(1),java面试必看书籍

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

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

需要这份系统化的资料的朋友,可以点击这里获取

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()

.csrf().disable();

}

}

我们可以在 successHandler 方法中,配置登录成功的回调,如果是前后端分离开发的话,登录成功后返回 JSON 即可,同理,failureHandler 方法中配置登录失败的回调,logoutSuccessHandler 中则配置注销成功的回调。

5.忽略拦截


如果某一个请求地址不需要拦截的话,有两种方式实现:

  • 设置该地址匿名访问

  • 直接过滤掉该地址,即该地址不走 Spring Security 过滤器链

推荐使用第二种方案,配置如下:

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override

public void configure(WebSecurity web) throws Exception {

web.ignoring().antMatchers(“/vercode”);

}

}

Spring Security 另外一个强大之处就是它可以结合 OAuth2 ,玩出更多的花样出来,这些我们在后面的文章中再和大家细细介绍。

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:

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

需要这份系统化的资料的朋友,可以点击这里获取

存中…(img-3ffFB98M-1715324142106)]

[外链图片转存中…(img-uOKMyShw-1715324142106)]

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

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值