精品网站建设比较好婚纱网站源代码

张小明 2026/1/11 14:28:04
精品网站建设比较好,婚纱网站源代码,茂名企业做网站,外贸网站推广营销一、login接口鉴权流程1.1 流程概述login接口是用户认证入口#xff0c;核心是验证用户名密码并生成JWT Token。流程涉及控制器、认证管理器、用户服务、密码编码器、JWT工具和过滤器协同工作。1.2 详细步骤与代码示例1.2.1 请求接收#xff08;Controller层接口#xff09;…一、login接口鉴权流程1.1 流程概述login接口是用户认证入口核心是验证用户名密码并生成JWT Token。流程涉及控制器、认证管理器、用户服务、密码编码器、JWT工具和过滤器协同工作。1.2 详细步骤与代码示例1.2.1 请求接收Controller层接口组件标注表现层接口AuthController.login()RestControllerRequestMapping(/api/auth)RequiredArgsConstructorpublic class AuthController {private final AuthenticationManager authenticationManager;private final JwtUtils jwtUtils;PostMapping(/login)public ResultJwtResponse login(RequestBody LoginRequest request) {Authentication authentication authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword()));UserDetails userDetails (UserDetails) authentication.getPrincipal();String token jwtUtils.generateToken(userDetails);return Result.success(new JwtResponse(token, userDetails.getUsername()));}}Data class LoginRequest { private String username; private String password; }Data class JwtResponse { private String token; private String username; public JwtResponse(String t, String u) { tokent; usernameu; } }1.2.2 触发认证与加载用户信息Service层自定义用户服务实现ServiceRequiredArgsConstructorpublic class UserDetailsServiceImpl implements UserDetailsService {private final UserMapper userMapper;private final RoleMapper roleMapper;Overridepublic UserDetails loadUserByUsername(String username) {UserPo user userMapper.selectOne(new QueryWrapperUserPo().eq(username, username));if (user null) throw new UsernameNotFoundException(用户不存在);SetRolePo roles roleMapper.findRolesByUserId(user.getId());user.setRoles(roles);return user;}}Spring Security认证管理器源码核心逻辑ProviderManagerpublic class ProviderManager implements AuthenticationManager {private ListAuthenticationProvider providers;public Authentication authenticate(Authentication auth) {for (AuthenticationProvider p : providers) {if (p.supports(auth.getClass())) {Authentication result p.authenticate(auth);if (result ! null) return result;}}throw new AuthenticationException(认证失败) {};}}1.2.3 密码校验Util层配置类代码Configurationpublic class SecurityConfig {Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }}密码对比源码核心逻辑DaoAuthenticationProviderpublic class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {protected void additionalAuthenticationChecks(UserDetails ud, UsernamePasswordAuthenticationToken auth) {String presented auth.getCredentials().toString();String encoded ud.getPassword();if (!passwordEncoder.matches(presented, encoded)) throw new BadCredentialsException(密码错误);}}BCryptPasswordEncoder源码核心逻辑public class BCryptPasswordEncoder implements PasswordEncoder {public boolean matches(CharSequence raw, String encoded) {BCrypt.HashData hashData decode(encoded);byte[] hashed BCrypt.hashpw(raw.toString(), hashData);return constantTimeEquals(hashed, hashData.password);}}1.2.4 生成JWT TokenUtil层JWT工具类代码Componentpublic class JwtUtils {Value(${app.jwt.secret}) private String secret;Value(${app.jwt.expiration}) private long expiration;public String generateToken(UserDetails ud) {return Jwts.builder().setSubject(ud.getUsername()).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() expiration)).signWith(SignatureAlgorithm.HS256, secret).compact();}}1.2.5 后续请求认证插件层Filter自定义过滤器代码ComponentRequiredArgsConstructorpublic class JwtAuthFilter extends OncePerRequestFilter {private final JwtUtils jwtUtils;private final UserDetailsServiceImpl userDetailsService;Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) {String token parseJwt(req);if (token ! null jwtUtils.validateToken(token)) {String username jwtUtils.extractUsername(token);UserDetails ud userDetailsService.loadUserByUsername(username);UsernamePasswordAuthenticationToken auth new UsernamePasswordAuthenticationToken(ud, null, ud.getAuthorities());SecurityContextHolder.getContext().setAuthentication(auth);}chain.doFilter(req, res);}private String parseJwt(HttpServletRequest req) {String h req.getHeader(Authorization);return (h ! null h.startsWith(Bearer )) ? h.substring(7) : null;}}1.3 login接口执行流程图前端发起登录请求\nPOST /api/auth/loginAuthController.loginAuthenticationManager.authenticateDaoAuthenticationProvider.authenticateUserDetailsServiceImpl.loadUserByUsernameUserMapper.selectOne\n查询用户基础信息RoleMapper.findRolesByUserId\n加载角色权限additionalAuthenticationChecks\n密码校验BCryptPasswordEncoder.matches\n比对密码生成已认证凭证\nUsernamePasswordAuthenticationTokenJwtUtils.generateToken\n生成JWT Token返回Token给前端二、PreAuthorize接口鉴权流程2.1 流程概述PreAuthorize是方法级权限控制注解核心是在方法执行前校验用户权限。流程涉及AOP拦截、权限解析、授权决策三个阶段。2.2 详细步骤与代码示例2.2.1 控制器接口标注PreAuthorize表现层RestControllerRequestMapping(/api/order)RequiredArgsConstructorpublic class OrderController {private final OrderService orderService;GetMappingPreAuthorize(hasAuthority(order:view))public PageResultOrderVo listOrders(OrderQuery query) {return orderService.queryOrders(query);}}2.2.2 AOP拦截与权限表达式解析插件层配置类代码ConfigurationEnableGlobalMethodSecurity(prePostEnabled true)public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {Override protected MethodSecurityExpressionHandler createExpressionHandler() {DefaultMethodSecurityExpressionHandler h new DefaultMethodSecurityExpressionHandler();h.setPermissionEvaluator(new CustomPermissionEvaluator());return h;}}MethodSecurityInterceptor源码核心逻辑public class MethodSecurityInterceptor implements MethodInterceptor {public Object invoke(MethodInvocation mi) {CollectionConfigAttribute attrs attributeSource.getAttributes(mi);if (attrs null) return mi.proceed();Authentication auth SecurityContextHolder.getContext().getAuthentication();accessDecisionManager.decide(auth, mi, attrs);return mi.proceed();}}2.2.3 权限校验逻辑Service层自定义权限检查器Componentpublic class PermissionChecker {public boolean hasPermission(String code) {Authentication auth SecurityContextHolder.getContext().getAuthentication();return auth.getAuthorities().stream().anyMatch(a - a.getAuthority().equals(code));}}表达式解析源码核心逻辑SecurityExpressionRootpublic class SecurityExpressionRoot {public boolean hasAuthority(String auth) {return authentication.getAuthorities().stream().anyMatch(a - a.getAuthority().equals(auth));}}授权决策管理器源码核心逻辑AffirmativeBasedpublic class AffirmativeBased implements AccessDecisionManager {public void decide(Authentication auth, Object obj, CollectionConfigAttribute attrs) {for (AccessDecisionVoter v : decisionVoters) {int r v.vote(auth, obj, attrs);if (r ACCESS_GRANTED) return;}throw new AccessDeniedException(权限不足);}}2.2.4 业务逻辑执行Service层ServiceRequiredArgsConstructorpublic class OrderServiceImpl implements OrderService {private final OrderMapper orderMapper;private final DataScopeService dataScopeService;public PageResultOrderVo queryOrders(OrderQuery q) {DataScopeService.DataScope scope dataScopeService.getCurUserDataScope();LambdaQueryWrapperOrderPo w new LambdaQueryWrapper();if (scope.getScopeType() 1) w.eq(OrderPo::getCreatorId, scope.getUserId());else if (scope.getScopeType() 2) w.eq(OrderPo::getDeptId, scope.getDeptIds().get(0));PageOrderPo p orderMapper.selectPage(new Page(q.getPageNum(), q.getPageSize()), w);return convertToPageResult(p);}}2.3 PreAuthorize接口执行流程图前端携带Token请求GET /api/orderJwtAuthFilter.doFilterInternal提取Token并验证设置SecurityContextUsernamePasswordAuthenticationTokenDispatcherServlet分发请求OrderController.listOrdersPreAuthorize标注方法MethodSecurityInterceptor.invokeAOP拦截attributeSource.getAttributes获取权限表达式accessDecisionManager.decide授权决策WebExpressionVoter.vote表达式投票SecurityExpressionRoot.hasAuthority解析权限逻辑PermissionChecker.hasPermission校验权限OrderServiceImpl.queryOrders执行业务逻辑返回数据给前端三、Spring Security过滤器链详解3.1 过滤器执行顺序与功能顺序 过滤器名称 功能描述 使用场景1 SecurityContextPersistenceFilter 恢复或清理SecurityContext隔离请求间状态。 所有请求必经前后端分离可简化。2 LogoutFilter 处理退出请求清理认证信息。 需显式退出功能时启用。3 UsernamePasswordAuthenticationFilter 处理传统用户名密码登录请求。 前后端分离通常替换为自定义登录接口。4 JwtAuthFilter 自定义过滤器提取Bearer Token并设置认证信息。 前后端分离核心过滤器手动配置。5 AnonymousAuthenticationFilter 为未认证用户分配匿名身份。 区分未登录与已登录用户。6 ExceptionTranslationFilter 捕获安全异常并转换为HTTP响应401/403。 所有异常处理中枢必配置。7 FilterSecurityInterceptor URL级权限校验根据authorizeRequests配置判断访问权限。 粗粒度权限控制。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网络管理网站策划书石家庄小学网站建设

Lightspeed Venture Partners通过六支基金募集资金,凸显了该公司定制化的基金架构和在人工智能领域深厚的投资业绩Lightspeed Venture Partners(简称“Lightspeed”)今日宣布,已完成六支独立、精选基金的募集,总额超过…

张小明 2026/1/5 19:11:06 网站建设

国外网站设计 网址arvixe如何做网站

PyTorch-CUDA-v2.6镜像是否支持A100/H100?答案在这里 在当今大模型训练如火如荼的背景下,硬件选型与软件环境的匹配成了决定项目成败的关键一环。你有没有遇到过这样的情况:好不容易申请到了搭载 H100 的计算资源,兴冲冲地拉下 P…

张小明 2026/1/6 6:20:14 网站建设

免费拥有自己的网站晋中网站建设

Kotaemon前端界面怎么搭?推荐这三个配套UI项目 在构建智能问答系统时,一个常见的困境是:后端 RAG 流程已经跑通,知识库也完成了向量化,但团队却卡在“怎么把结果展示出来”这一步。尤其是对于算法工程师或全栈能力较弱…

张小明 2026/1/5 20:09:06 网站建设

网站怎么做成小程序开发公司工程部管理制度

终极指南:3种强制开启USB调试模式的实用方案 【免费下载链接】手机强制开启USB调试模式 手机强制开启USB调试模式在安卓开发或者进行某些高级操作时,开启手机的USB调试模式是必要的步骤 项目地址: https://gitcode.com/open-source-toolkit/7832f …

张小明 2026/1/6 6:19:17 网站建设

wikidot网站怎么做wordpress 搜索记录

Wan2.2-T2V-A14B模型微调实战:定制专属视频风格 在短视频内容爆炸式增长的今天,品牌方和创作者每天都面临一个共同难题:如何以更低的成本、更快的速度产出高质量、风格统一的视频素材?传统制作流程依赖专业团队与复杂剪辑工具&am…

张小明 2026/1/6 14:47:25 网站建设

网站建设维护合同网站备案需要把网站做好吗

1. 为什么这个毕设项目值得你 pick ?毕设小白的福音!基于Java的安全生产执法监管智慧管理系统的设计与实现。该系统主要功能模块包括企业管理、生产设施管理、员工培训管理等九个方面,创新性地采用了SpringMVC开发框架和MySQL数据库进行高效率的数据管理…

张小明 2026/1/6 14:49:26 网站建设