配置自定义登录页面和基于内存存储认证信息
- 一.自定义登录页面
- 二.基于内存存储认证信息
-
喜欢的小伙伴可以点赞、关注、收藏哦 -
-- 技术源于追求,技术改变生活 --
提示:本次认证采用自定义页面和HttpBasic认证方式,密码加密方式为BCryptPasswordEncoder-- 明文加随机盐值
一.自定义登录页面
1.修改安全配置类
/**
* configure(HttpSecurity http) 资源权限配置(过滤器链)
* 1.拦截的哪一些资源
* 2.资源所对应的角色权限
* 3.定制登录页面、登录请求地址、错误处理方式
* 4.自定义 spring security 过滤器等
* 5.定义认证方式:httpBasic httpForm
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
//HttpBasic和HttpForm2种认证方式
http.formLogin()//表单认证
//注意不管是自定义登录页面还是请求地址开头都要加 /
.loginPage("/login/page")//交给/login/page响应认证(登陆)页面
.loginProcessingUrl("/login/form")//登录表单处理url,默认是login
.usernameParameter("name") //修改默认的username 注:要和页面提交的字段名字一样
.passwordParameter("pwd") //修改默认的password
.and()//链接符号
.authorizeRequests() //认证请求
.antMatchers("/login/page").permitAll()//放行跳转认证请求
.anyRequest().authenticated() //所有进入应用的HTTP请求都要进行认证
;
}
提示:这里要配置login/page的映射方法
在core模块中配置/login/page
/**
* @author LIJW
* @date 2021/3/27 5:31 下午
* 自定义登陆页面
*/
@Controller
public class CustomLoginController {
/**
* 登陆处理 前往认证(登陆页面)
* @param request
* @param response
* @return
*/
@RequestMapping("/login/page")
public String toLogin(HttpServletRequest request, HttpServletResponse response){
//响应一个登陆页面 classpath: /templates/login.html
return "login";
}
}
2.放行静态资源
/**
* 释放静态资源
* @param web
* @throws Exception
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/dist/**","/modules/**","/plugins/**");
}
提示:还是中安全配置类中配置
3.测试
二.基于内存存储认证信息
1.修改安全配置类
/**
* 重写configure(AuthenticationManagerBuilder)身份认证管理器
* 1.认证信息提供方式(用户名、密码、当前用户的资源权
* 2.可采用内存存储方式,也可能采用数据库方式等
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//upgradeEncoding 是否需要再次进行编码增加安全性, 默认不需要
//matches 输入的密码与数据库中的密码对比 加密前后对比(一般用来比对前端提交过来的密码和数据库存储的加密密码, 也就是明文和密文的对比)
//encode 是否需要编码,一般不需要。 用于加密明文 加密(我们来调用,一般在注册的时候,将前端传过来的密码,进行加密后保存进数据库)
String encode = passwordEncoder().encode("1234");
//用户信息存储在内存中
auth.inMemoryAuthentication()
.withUser("zhangsan")
.password(encode).authorities("ADMIN");
}
2.修改密码认证方式
@Bean
public PasswordEncoder passwordEncoder() {
// 设置默认的加密方式
return new BCryptPasswordEncoder();
}