添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在springboot项目中的controller层可以通过 @RequestAttribute (Requests. CURRENT_USER ) ItBaseUser user  获取用户对象信息,但很多时候需要在service层用到当前用户的信息;

1、先来看下登录时存入用户信息到cookie中

CookieUtil.setCookie(response, Cookies.USER_COOKIE, Base64Util.encoder(String.valueOf(user.getUid())));

2、在用户调用其他方法时,要先认证当前用户信息,通过对cookie的认证后,可以到数据库中进行查询获取用户的实体对象的全部信息,然后将用户对象存入到request中

request.setAttribute(Requests.CURRENT_USER, user);

3、在controller层中按如下方式进行获取

@RequestAttribute(Requests.CURRENT_USER) ItBaseUser user

4、如果每次在service层中使用都要从controller层进行传递,就显得比较麻烦,可以采用以下方法在service层进行用户信息的获取;

1>新建一个类,来获取用户对象信息

public class UserRequest {
   public static ItBaseUser getCurrentUser(){
      HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
      ItBaseUser user = (ItBaseUser)request.getAttribute(Requests.CURRENT_USER);
      return user;
2>可以直接在service层中进行用户信息对象的获取
ItBaseUser user = UserRequest.getCurrentUser();
使用spring oauth2框架做授权鉴定。想获取当前用户信息怎么办? 我们知道spring oauth2是基于spring security的实现的。 spring security可以通过SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取当前用户信息。 而spring oauth2通过SecurityContextHolder.getContext().getAuthentication().getPrincipal()却只能拿到当前用户的用户名。 然而实际开发过程,我们较常用到的大部分都是用户的id。 那么怎么通过配置获取当前用户的信息呢? 如果你需要从其他非Controller组件(如另一个Service或组件)调用Service的方法,你可以通过相同的方式注入Service。注解,它告诉Spring这是一个Service组件,应该被管理在Spring容器。首先,你需要定义一个Service接口,其包含你需要实现的方法。时,Controller会调用Service的。在你的Controller,你可以使用。注解来注入Service。 在Spring Boot获取登录用户的个人信息通常需要使用Spring Security框架来进行身份认证和授权。Spring Security提供了一个名为SecurityContextHolder的上下文对象,它包含了当前请求的身份认证信息。通过SecurityContextHolder,可以访问当前已认证的用户的信息。 使用JWT生成token,并在controller通过注解判断登录权限,自动在需要登录的api获取用户信息,支持分布式登录。 废话不多说,直接上链接sunxy0617/jinwu_admin: JWT使用学习 (github.com) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 获取登录用户的用户名:getPrincipal() 获取通过身份验证的用户的密码:getCredentials() 获取已认证用户的分配角色:getAuthorities() /用来跳过验证的PassToken @Target({@Data @ApiModel("返回结果") public class R < T > {/*** 错误码*/ @ApiModelProperty("错误码") private Integer code;/*** 错误消息*/ @ApiModelProperty("错误消息") private String msg;/*** 内容*/ @ApiModelProperty("内容") private T data;  * Description: 用ThreadLocal提供一个存储线程内变量的地方.  * 客户端代码可以用静态方法存储和获取线程内变量,不需要依赖于HttpSession.  * web的Controller可通过此处向business传入user_id之类的变量 @SuppressWarnings("unchecked") public 2.使用Threadlocal线程,请求产生响应前,处于同一个线程。 比如在一个登录拦截器,在preHandle方法登录成功后,放行前,想把user对象传到controller或service 新建类 LoginInterceptor public class LoginInterceptor extends H...