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

聊城建设工程质量信息网站深圳雅迅公司网站建设

聊城建设工程质量信息网站,深圳雅迅公司网站建设,广东如何做网站设计,好看的网站案例在文章:SpringBoot整合SpringSecurit(一)实现ajax的登录、退出、权限校验-CSDN博客 里面,使用的session的方式进行保存用户信息的,这一篇文章就是使用token的方式。 在其上进行的改造,可以先看SpringBoot…

在文章:SpringBoot整合SpringSecurit(一)实现ajax的登录、退出、权限校验-CSDN博客

里面,使用的session的方式进行保存用户信息的,这一篇文章就是使用token的方式。

在其上进行的改造,可以先看SpringBoot整合SpringSecurit(一)实现ajax的登录、退出、权限校验-CSDN博客,再看这个就比较好了。

1、新建过滤器,将通过token查询到的用户信息存入到security中

package com.example.springboot.security.demo.filter;import com.example.springboot.security.demo.controller.LoginController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects;/*** 将用户信息存入security中*/
@Slf4j
@Component
public class AuthFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {// 比如请求头中有个header叫token,放置了认证后的请求头String token = request.getHeader("token");log.info("用户token:{}", token);if (StringUtils.hasText(token)) {// 验证token是否已经登录了的用户的token,用户的token临时放在了LoginControllerUserDetails userDetails = LoginController.TOKEN_USERNAME.get(token);if (Objects.nonNull(userDetails)) {// 有,表示token是对的,设置线程上下文认证信息,然后访问其他资源时,security就会放行UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities());SecurityContextHolder.getContext().setAuthentication(authenticationToken);}}filterChain.doFilter(request, response);}
}

2、修改security的配置

/*** 密码加密方式* //使用BCrypt进行密码加密校验* @return*/@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}/*** 2.0配置,security通过token访问,不通过session访问* @param http* @throws Exception*/@Resourceprivate AuthFilter authFilter;@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable();//禁用CSRF控制,即spring security不再限制CSRF,即跨越访问http.authorizeRequests().antMatchers("/static/**").permitAll()//不需要登录认证就可以访问,静态资源等不需要验证.antMatchers("/login").permitAll() // 允许任何人访问登录接口.anyRequest().authenticated();//其他路径必须验证身份http.sessionManagement(sessionManager -> sessionManager.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); //不再管理session// 设置用户访问前filterhttp.addFilterBefore(authFilter, UsernamePasswordAuthenticationFilter.class);http.formLogin().loginPage("/login-view.html")//自定义登录页面路径,加载登录的html页面.successHandler(userLoginAuthenticationSuccessHandler)//验证成功处理.failureHandler(userLoginAuthenticationFailureHandler)//验证失败处理.permitAll();//登录页面无需设置验证http.logout().logoutUrl("/logout")//登出路径.logoutSuccessHandler(userLogoutSuccessHandler)//登出处理.permitAll()//不需要身份认证.and().exceptionHandling().accessDeniedHandler(userAuthenticationAccessDeniedHandler);//无权限时的处理}

3、修改登录方法,后端获取到账号、密码后,根据账号,查询到用户信息,在校验密码,如果密码成功,就生成token,并且把token放在内存或者redis中就完成了

/*** 简单的存放用户登录认证成功信息的地方*/public final static Map<String, UserDetails> TOKEN_USERNAME = new HashMap<>();@Resourceprivate UserDetailsServiceImpl userDetailsService;/*** SecurityConfig中配置的密码加密*/@Resourceprivate PasswordEncoder passwordEncoder;/*** 登录认证,获得token* @param account 登录账号* @param password 密码* @return 认证token*/@ResponseBody@PostMapping("/login")public JsonData login(String account, String password) {JsonData jsonData = null;//根据账号,查询用户信息UserDetails userDetails = userDetailsService.loadUserByUsername(account);if (userDetails == null) {jsonData = new JsonData(401,"用户名不存在");return jsonData;}//密码校验if(!passwordEncoder.matches(password,userDetails.getPassword())) {jsonData = new JsonData(401,"用户或密码错误");return jsonData;}// 认证成功发个token,返回给前端String token = UUID.randomUUID().toString();TOKEN_USERNAME.put(token, userDetails);System.out.println("token:" + token);jsonData = new JsonData(200,token);return jsonData;}

4、测试

4.1、获取token

4.2、通过token查询信息

 

http://www.yayakq.cn/news/369717/

相关文章:

  • 做汽车网站怎么挣钱wordpress评论数
  • 从网上怎么做网站营销嵌入式软件开发哪个好点
  • 网站手机模板和pc模板要分开做中山专业外贸网站开发
  • 建设官方网站企业网站彩票网站是静态动态
  • 网站搭建代码建设银行纪检监察网站
  • 上海网站排名seo公司哪家好福州网页定制
  • 关于网站开发的论文医学关键词 是哪个网站做
  • 西安北郊网站建设购物网站开发目的
  • 韩国网站如何切换中文电视剧在线观看免费影视网站
  • 网站空间的地址app软件系统定制开发
  • 服装网站的建设策划怎么做网络彩票网站
  • 兰州做网站公司es5188wordpress应用下载主题
  • 查询个人信息最全的网站vs怎样建设新网站
  • 深圳有哪些网站是做餐饮沙龙的制作图片的软件是
  • 石河子建设局网站做视频导航网站有哪些
  • 网站后台培训方案网站建设活动广告
  • 公司建网站多少钱一个如何建设网站首页
  • 丰都网站建设哪家好wordpress语言文件
  • 丽水建设部门网站国际新闻用什么软件看看
  • 网站导入做网站ps注意事项
  • 未备案网站通知佛山最新通知今天
  • 有没有专门做游戏辅助的网站使用apmserv本地搭建多个网站
  • 网站留言板作用wordpress no.7
  • 网站有哪些公司注册地址与实际经营地址不符
  • 龙岩做网站公司哪家好成都大学网站建设特色
  • 手机网站静态动态业网站建设
  • 浙江网站建设推广公司十大排行提供模板网站制作多少钱
  • 海口企业自助建站厂房装修东莞网站建设
  • 网站所有权问题wordpress脚底修改
  • 甘肃建设职工教育培训中心网站图片扫一扫在线识别照片