当前位置: 首页 > news >正文

合法购物网站建设百度查重工具

合法购物网站建设,百度查重工具,网站用视频做背景,吕子乔做网站吹的语录SpringSecurity认证流程:loadUserByUsername()方法内部实现。 实现步骤: 构建一个自定义的service接口,实现SpringSecurity的UserDetailService接口。建一个service实现类,实现此loadUserByUsername方法。…

SpringSecurity认证流程:loadUserByUsername()方法内部实现。

实现步骤:

  1. 构建一个自定义的service接口,实现SpringSecurity的UserDetailService接口。
  2. 建一个service实现类,实现此loadUserByUsername方法。
  3. 调用登录的login接口,会经过authenticationManager.authenticate(authenticationToken)方法。此方法会调用loadUserByUsername方法。
  4. 方法内部做用户信息的查询,判断用户名和密码是否正确,这是第一道认证。
@Service
@RequiredArgsConstructor
public class UserDetailsServiceImpl implements UserDetailsService {private final SysUserMapper sysUserMapper;//用户登录请求/login,自动调用方法//根据用户名获取用户信息//UserDetails 存储用户信息,包括用户名,密码,权限@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();wrapper.eq(SysUser::getUsername, username);SysUser sysUser = sysUserMapper.selectOne(wrapper);if (Objects.isNull(sysUser)){throw new UsernameNotFoundException("用户名不存在");}//认证成功回UserDetails对象return new LoginUser(sysUser);}}

@ToString
public class LoginUser implements UserDetails {private SysUser sysUser;public LoginUser(SysUser sysUser) {this.sysUser = sysUser;}// 权限@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return List.of();}@Overridepublic String getPassword() {return sysUser.getPassword();}@Overridepublic String getUsername() {return sysUser.getUsername();}// 账号是否过期@Overridepublic boolean isAccountNonExpired() {return true;}// 账号是否被锁定@Overridepublic boolean isAccountNonLocked() {return true;}// 密码是否过期@Overridepublic boolean isCredentialsNonExpired() {return true;}// 账号是否可用@Overridepublic boolean isEnabled() {return true;}
}

5.如果没有查到信息就抛出异常。

6.如果查到信息了再接着查用户的权限信息,返回权限信息到loginUser实体。

7.此实体实现了SpringSecurity自带的userDetail接口。实现了getAuthorities方法。

.8每次查询权限都会调用此方法。

9.查询到的权限,会被返回到login接口。进行后续操作。

10.如果认证通过,通过身份信息中的userid生产一个jwt。

11.把完整的用户信息作为value,token作为key存入redis。

@RestController
@Tag(name = "认证模块", description = "认证模块")
@RequestMapping("/auth")
@RequiredArgsConstructor
public class AuthController {//注入AuthenticationManager(认证管理器)private final AuthenticationManager authenticationManager;private final JwtUtils jwtUtils;@PostMapping("/login")@Operation(summary = "登录")public Result login(@RequestParam("username") String username, @RequestParam("password") String password) {System.out.println(username + password);//登录逻辑//调用UserDetailsService.loadUserByUsername方法获取//不能直接调用,需要通过AuthenticationManager进行认证Authentication authentication = new UsernamePasswordAuthenticationToken(username, password);Authentication authenticate = null;try {authenticate = authenticationManager.authenticate(authentication);} catch (BadCredentialsException e) {return Result.failed(ResultCode.USERNAME_OR_PASSWORD_ERROR);}//认证成功方法tokenString token=jwtUtils.generateToken(authenticate);return Result.success(token);}
}

@Configuration
@EnableWebSecurity // 开启web安全
@EnableMethodSecurity
@RequiredArgsConstructor
public class SecurityConfig {private final IgnoredUrl ignoredUrl;/*** 配置认证管理器 AuthenticationManager* 作用:用于身份认证* 参数:UserDetailsService, PasswordEncoder*/@Beanpublic AuthenticationManager authenticationManager(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) {DaoAuthenticationProvider provider = new DaoAuthenticationProvider();provider.setUserDetailsService(userDetailsService);provider.setPasswordEncoder(passwordEncoder);return new ProviderManager(provider);}/*** 密码编码器** @return*/@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {//关闭csrf防护,否则回导致登录失败http.csrf(a -> a.disable()); //禁用SCRF//配置安全拦截规则http.authorizeHttpRequests(req ->req.requestMatchers(ignoredUrl.getUrls()).permitAll().anyRequest().authenticated());/*** 配置登录页*/http.formLogin(form -> form.loginPage("/").successForwardUrl("/index") //登录成功跳转页面.loginProcessingUrl("/login")//登录处理url.failureForwardUrl("/error") //登录失败跳转页面//                .usernameParameter("name")//自定义用户名参数//                .passwordParameter("password")//自定义密码参数);return http.build();}
}
@Component
public class JwtUtils {@Value("${jwt.secret}")private String secret;@Value("${jwt.expiration}")private Integer expiration;/****/public String generateToken(Authentication authentication) {Date now = new Date();Date expirationDate = DateUtil.offsetSecond(now, expiration);Map<String, Object> claims = new HashMap<>();claims.put("username", authentication.getName());//用户名claims.put("exp", expirationDate);//        claims.put();return JWTUtil.createToken(claims, secret.getBytes());}
}
@Component
@Data
@ConfigurationProperties(prefix = "security.ignored")
@ToString
public class IgnoredUrl {private String[] urls;
}

登录成功

登陆失败

http://www.khdw.cn/news/64018.html

相关文章:

  • 温州网站建设怎么样广州引流推广公司
  • wordpress建企业网站教程创意营销
  • 然后在亚马逊网站上做外贸成都网站建设方案托管
  • 湘潭做网站价格 d磐石网络西安百度竞价托管公司
  • 如何推荐别人做网站国家提供的免费网课平台
  • 怎么做软文链接打开后是自定义网站seo培训机构哪家好
  • 设计软件网站制作网站建设整站seo排名要多少钱
  • 濮阳网站建设熊掌网络站长素材网站
  • 微信 html5 网站广州营销课程培训班
  • wordpress 文章模板 css插件百度seo排名公司
  • dtcms怎么做自己网站百度竞价推广托管
  • 网站建设提升界面流畅程度谷歌搜索引擎香港入口
  • 微盟商城seo模拟点击
  • 怎么样将网站内容做的漂亮武汉网络推广平台
  • 深圳市建设交易网站秦皇岛seo排名
  • 陕西营销型网站建设武汉seo计费管理
  • 网站案例鉴赏推广网络广告
  • 自已建网站微信登录it人必看的网站
  • 泰安可以做网站的公司系统设置友情链接有什么作用
  • 学做网站多久数字营销工具
  • 企业品牌网站建设多少钱网络销售技巧
  • wordpress建站方法网络推广需要花多少钱
  • 高仿卡西欧手表网站自动外链
  • 曲靖网站制作公司seo站内优化教程
  • 可以免费做会计题的网站常德论坛网站
  • 天元建设集团有限公司公章图片seo的宗旨是什么
  • 建德网站设计公司百度关键词搜索热度
  • 网站定制公司哪家好成都网站seo推广
  • 建个购物网站要多少钱网络营销的优势包括
  • 深南花园裙楼+网站建设搜索引擎优化是什么意思