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

网站维护服务合同wordpress建字段

网站维护服务合同,wordpress建字段,阿里巴巴网站怎么做推广方案,做水果网站需要些什么手续Spring Boot Vue的网上商城之springsecurityjwtredis实现用户权限认证实现 在网上商城项目中#xff0c;用户的安全性是非常重要的。为了实现用户权限认证和安全校验#xff0c;我们可以使用Spring Security、JWT和Redis来实现。本篇博客将详细介绍后端和前台的实现过程 Vue的网上商城之springsecurityjwtredis实现用户权限认证实现 在网上商城项目中用户的安全性是非常重要的。为了实现用户权限认证和安全校验我们可以使用Spring Security、JWT和Redis来实现。本篇博客将详细介绍后端和前台的实现过程并提供相应的代码案例。 思路 当用户点击登录按钮时前端发送一个POST请求到后端的登录接口传递用户名和密码。后端接收到请求后验证用户名和密码的正确性。如果验证通过后端生成一个JWTJSON Web Token并将其返回给前端。 前端接收到JWT后将其存储在本地例如使用localStorage。然后通过Vue Router进行页面跳转跳转到需要进行权限校验的页面。 在需要进行权限校验的页面组件中可以在created钩子函数中检查本地存储中是否存在JWT。如果不存在则表示用户未登录或登录已过期可以通过Vue Router跳转到登录页面。 需要注意的是在每次向后端发送请求时需要将JWT作为请求头的Authorization字段进行传递以便后端进行权限校验。 后端在接收到请求时可以通过解析JWT来验证用户的身份和权限。JWT中通常包含用户ID、用户名、权限信息等。后端可以使用Spring Security的相关功能进行JWT的解析和校验。 总结来说用户登录和权限认证的流程可以简化为以下几个步骤 用户在前端页面输入用户名和密码并点击登录按钮。前端发送POST请求到后端的登录接口传递用户名和密码。后端验证用户名和密码的正确性如果验证通过生成JWT并返回给前端。前端接收到JWT后将其存储在本地。前端通过Vue Router进行页面跳转跳转到需要进行权限校验的页面。在需要进行权限校验的页面组件中检查本地存储中是否存在JWT如果不存在则跳转到登录页面。在每次向后端发送请求时将JWT作为请求头的Authorization字段进行传递。后端在接收到请求时解析JWT并进行权限校验校验通过则返回相应的数据或页面。 后端实现 Spring Security配置 首先在后端的Spring Boot项目中我们需要配置Spring Security来实现用户权限认证。我们可以创建一个SecurityConfig类来配置Spring Security。 Configuration EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {Autowiredprivate UserService userService;Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().antMatchers(/api/public/**).permitAll().anyRequest().authenticated().and().addFilter(new JwtAuthenticationFilter(authenticationManager())).addFilter(new JwtAuthorizationFilter(authenticationManager(), userService)).sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);}Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userService).passwordEncoder(passwordEncoder());}Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();} }上述代码中我们配置了允许访问/api/public/**路径的请求其他请求需要进行认证。我们还添加了两个过滤器JwtAuthenticationFilter和JwtAuthorizationFilter来处理JWT的认证和授权。 JWT认证和授权过滤器 接下来我们来实现JWT的认证和授权过滤器。 public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {private AuthenticationManager authenticationManager;public JwtAuthenticationFilter(AuthenticationManager authenticationManager) {this.authenticationManager authenticationManager;setFilterProcessesUrl(/api/login);}Overridepublic Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {try {UserCredentials credentials new ObjectMapper().readValue(request.getInputStream(), UserCredentials.class);return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(credentials.getUsername(), credentials.getPassword(), new ArrayList()));} catch (IOException e) {throw new RuntimeException(e);}}Overrideprotected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {String token Jwts.builder().setSubject(((User) authResult.getPrincipal()).getUsername()).setExpiration(new Date(System.currentTimeMillis() SecurityConstants.EXPIRATION_TIME)).signWith(SignatureAlgorithm.HS512, SecurityConstants.SECRET).compact();response.addHeader(SecurityConstants.HEADER_STRING, SecurityConstants.TOKEN_PREFIX token);} }public class JwtAuthorizationFilter extends BasicAuthenticationFilter {private UserService userService;public JwtAuthorizationFilter(AuthenticationManager authenticationManager, UserService userService) {super(authenticationManager);this.userService userService;}Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {String header request.getHeader(SecurityConstants.HEADER_STRING);if (header null || !header.startsWith(SecurityConstants.TOKEN_PREFIX)) {chain.doFilter(request, response);return;}UsernamePasswordAuthenticationToken authentication getAuthentication(request);SecurityContextHolder.getContext().setAuthentication(authentication);chain.doFilter(request, response);}private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {String token request.getHeader(SecurityConstants.HEADER_STRING);if (token ! null) {String username Jwts.parser().setSigningKey(SecurityConstants.SECRET).parseClaimsJws(token.replace(SecurityConstants.TOKEN_PREFIX, )).getBody().getSubject();if (username ! null) {User user userService.loadUserByUsername(username);return new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());}return null;}return null;} }上述代码中JwtAuthenticationFilter处理登录请求将用户的认证信息封装为JWT并添加到响应头中。JwtAuthorizationFilter处理其他请求从请求头中获取JWT并进行认证和授权。 用户服务和认证 为了实现用户的认证和授权我们需要创建一个用户服务实现类UserService。 Service public class UserService implements UserDetailsService {Autowiredprivate UserRepository userRepository;Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user userRepository.findByUsername(username);if (user null) {throw new UsernameNotFoundException(username);}return user;} }上述代码中我们通过用户名从数据库中获取用户信息。 Redis存储Token 为了增加用户登录的安全性我们可以将JWT存储到Redis中并设置过期时间。 Service public class TokenService {private RedisTemplateString, Object redisTemplate;public TokenService(RedisTemplateString, Object redisTemplate) {this.redisTemplate redisTemplate;}public void saveToken(String username, String token) {redisTemplate.opsForValue().set(username, token, SecurityConstants.EXPIRATION_TIME, TimeUnit.MILLISECONDS);}public boolean validateToken(String username, String token) {String storedToken (String) redisTemplate.opsForValue().get(username);return storedToken ! null storedToken.equals(token);}public void deleteToken(String username) {redisTemplate.delete(username);} }上述代码中我们使用redisTemplate将用户名和JWT存储到Redis中并设置过期时间。在校验Token时我们从Redis中获取存储的Token进行比较。 前台实现 在前台我们使用Vue来实现用户登录和权限认证的功能。我们需要创建相应的组件和路由来实现用户登录和权限校验。 登录组件 templatedivh1用户登录/h1form submit.preventloginlabel forusername用户名:/labelinput typetext idusername v-modelusername requiredbrlabel forpassword密码:/labelinput typepassword idpassword v-modelpassword requiredbrbutton typesubmit登录/button/form/div /templatescript export default {data() {return {username: ,password: };},methods: {login() {// 调用后端API接口进行用户登录// 使用axios或其他HTTP库发送POST请求}} }; /script路由配置 import Vue from vue; import VueRouter from vue-router; import Login from ./components/Login.vue; import ProductList from ./components/ProductList.vue;Vue.use(VueRouter);const routes [{ path: /login, component: Login },{ path: /products, component: ProductList, meta: { requiresAuth: true } } ];const router new VueRouter({routes });router.beforeEach((to, from, next) {const token localStorage.getItem(token);if (to.matched.some(record record.meta.requiresAuth)) {if (!token) {next(/login);} else {next();}} else {next();} });export default router;在上述代码中我们配置了两个路由/login用于用户登录/products用于展示商品列表。在/products路由中我们设置了requiresAuth为true表示需要进行权限校验。在路由导航守卫中我们检查是否存在Token如果不存在则跳转到登录页面。 入口文件 import Vue from vue; import App from ./App.vue; import router from ./router;new Vue({el: #app,router,render: h h(App) }).$mount(#app);在入口文件中我们创建了一个Vue实例并将路由配置和根组件传入。然后将Vue实例挂载到#app元素上。 用户登录 在登录组件中我们需要调用后端API接口进行用户登录并将返回的Token保存到本地存储中。 methods: {login() {axios.post(/api/login, {username: this.username,password: this.password}).then(response {const token response.data.token;localStorage.setItem(token, token);this.$router.push(/products);}).catch(error {console.error(error);});} }在上述代码中我们使用axios库发送POST请求到后端的登录接口。如果登录成功会返回一个包含Token的响应。我们将Token保存到本地存储中并使用$router.push方法跳转到商品列表页面。 权限校验 在商品列表组件中我们需要进行权限校验只有在用户登录成功并且存在Token的情况下才能访问该页面。 export default {created() {if (!localStorage.getItem(token)) {this.$router.push(/login);}} };在上述代码中我们在组件创建时检查本地存储中是否存在Token如果不存在则跳转到登录页面。 总结 本文介绍了如何使用Spring Security和Vue实现用户登录和权限认证的功能。通过使用JWT和Redis存储Token我们可以实现无状态的用户认证提高系统的可扩展性和安全性。同时通过使用Vue的路由导航守卫我们可以实现前端的权限校验确保只有登录用户才能访问受限资源。希望本文能对你理解和实现用户登录和权限认证功能有所帮助。
http://www.huolong8.cn/news/128477/

相关文章:

  • 制作网站需要哪些工具做视频网站采集需要多大的空间
  • dede网站logo怎么改网站建设crm
  • 佛山网站推广 优帮云凡科网 小程序
  • 青岛的网站建设微信小程序商城源代码
  • 营销网站制作费用网站内链优化的角度
  • 如何备份网站程序网站开发网上宠物店管理系统
  • 北京高端网站建设规划网站如何创建
  • 怎样做 云知梦 网站 付费网站网站建设公司品牌
  • 企业网站推广阶段网站推广临沂
  • 做片视频在线观看网站摄影网站投稿
  • jsp做网站案例深圳公司团建去哪里好
  • 为什么要学电商网站建设寿光建设银行网站
  • 杨凌做网站邢台163官网
  • 网站建设计入哪个明细科目怎样做化妆品公司网站
  • 建设银行佛山分行网站seo方法图片
  • 网站建设需要准备什么实时热点新闻事件2021
  • 肇庆住房建设部网站住建局官网查询系统
  • 鹿泉区城乡建设局网站上杭网站建设公司
  • 石家庄做网站排名公司哪家好seo优化方案书
  • 购买域名网站怎么建立简单网站
  • 品牌网站设计制作价格wordpress代码块插件
  • 蚌埠网站建设网站企业网站首页图片
  • 免费建站网站群辽宁天一建设有限责任公司网站
  • 阿里云模板建站站酷设计官网
  • 如何做付款网站自己的网站怎么赚钱
  • 网站怎样做排名莱州网页设计
  • 郑州 (网站建设个人网站如何在工信部备案
  • 电商设计网站有哪些义乌公司做网站
  • 建站公司 深圳永州做网站的公司
  • 海北州公司网站建设织梦网站主页代码在后台怎么改