精华内容
下载资源
问答
  • jeecg-boot 前台获取登录人信息

    千次阅读 2020-08-04 14:30:32
    import {mapGetters} from 'vuex' ... ... methods: { ...mapGetters(["nickname", "avatar","userInfo"]), } //使用 this.userInfo().username
      import {mapGetters} from 'vuex'
      ...
      ...
      methods: {
          ...mapGetters(["nickname", "avatar","userInfo"]),
      }
      //使用
      this.userInfo().username
    
    展开全文
  • 文章目录添加额外的信息授权服务改造添加CustomTokenEnhancer类:授权服务配置类:OAuth2AuthorizationConfig改造资源服务改造新增CustomerAccessTokenConverter类:资源服务配置类改造:OAuth2ResourceConfig公共...


    在使用JWT存储token的时候,由于授权服务把token给了资源服务之后,资源服务就不会再访问授权服务索求token相关的信息,以及当前登录人的信息。因为这些token的校验,以及授权服务想告诉资源服务的信息,都可以存放在这个token里,资源服务只需要去解析就可以了。
    在默认的情况下,存放的信息是UserDetails(也就是security中,我们的用户表继承实现的那个类,在我这里的是SecurityUserInfo)的信息。但是,如果我想传一些其他信息呢?

    添加额外的信息

    需要说明的是,不管是使用对称加密或者非对称加密的JWT方式,添加额外信息的操作都是一样的。

    授权服务改造

    添加CustomTokenEnhancer类:

    可以自定义一个TokenEnhancer将额外的信息添加到token中:

    public class CustomTokenEnhancer implements TokenEnhancer {
    
    	@Override
    	public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
    		// 获取登录信息
    		SecurityUserInfo user = (SecurityUserInfo) oAuth2Authentication.getUserAuthentication().getPrincipal();
    		Map<String, Object> customInfoMap = new HashMap<>();
    		customInfoMap.put("loginName", user.getUsername());//登录名
    		customInfoMap.put("name", user.getName());//用户姓名
    		customInfoMap.put("content", "这是一个测试的内容");
    		customInfoMap.put("authorities", user.getAuthorities());
    		((DefaultOAuth2AccessToken) oAuth2AccessToken).setAdditionalInformation(customInfoMap);
    		return oAuth2AccessToken;
    	}
    }
    

    在这个代码中,我传递了一些信息,大多是是来自UserDetails类的(这个类中,一般就包含了用户的所有信息)。这里关键的一点是,我还床了一个content字段,这个是我自定义的,要是资源服务端能收到这个字段信息,则说明目的达到了。

    授权服务配置类:OAuth2AuthorizationConfig改造

    修改configure(AuthorizationServerEndpointsConfigurer endpoints)方法的代码:

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    	// @formatter:off
    	......if(JWT_SY_STORE.equalsIgnoreCase(tokenStore) || JWT_ASY_STORE.equalsIgnoreCase(tokenStore)) {
    		// token生成方式
    		TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
    	    tokenEnhancerChain.setTokenEnhancers(Arrays.asList(new CustomTokenEnhancer(), accessTokenConverter()));
    		endpoints.tokenEnhancer(tokenEnhancerChain);
    	}
    	// @formatter:on
    }
    

    这里,主要就是将我们自定义的CustomTokenEnhancer,加入到TokenEnhancerChain 中,其他的代码不用变化。
    至此,授权服务端就算是改造完成了。

    资源服务改造

    资源服务的改造,其实就是在公用包中,加一些代码,然后再提供一个工具类,来获取这个当前登录人的信息。

    新增CustomerAccessTokenConverter类:

    /**
     * 自定义AccessTokenConverter转换<br/>
     * 不定义这个类,那么自定义的字段的值不会取到(实际上是传过来了);<br/>
     * 所以,这里主要的操作就是把传过来的自定义的值保存下来。<br/>
     * 关于内部类CustomerUserAuthenticationConverter中的重写方法和私有方法getAuthorities,都是仿照父类DefaultUserAuthenticationConverter来写的,
     * 在debug模式下,跟下代码就知道为什么这么设置值了
     * @author FYK<br/> 2019年8月14日
     * @version 1.0
     * @since JDK:1.8
     */
    public class CustomerAccessTokenConverter extends DefaultAccessTokenConverter {
    
    	public CustomerAccessTokenConverter() {
    		super.setUserTokenConverter(new CustomerUserAuthenticationConverter());
    	}
    
    	private class CustomerUserAuthenticationConverter extends DefaultUserAuthenticationConverter {
    
    		@Override
    		public Authentication extractAuthentication(Map<String, ?> map) {
    			return new UsernamePasswordAuthenticationToken(map, "N/A", this.getAuthorities(map));
    		}
    
    		private Collection<? extends GrantedAuthority> getAuthorities(Map<String, ?> map) {
    			if (!map.containsKey(AUTHORITIES)) {
    				return AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils
    						.arrayToCommaDelimitedString(new String[]{}));
    			}
    			Object authorities = map.get(AUTHORITIES);
    			if (authorities instanceof String) {
    				return AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
    			}
    			if (authorities instanceof Collection) {
    				return AuthorityUtils.commaSeparatedStringToAuthorityList(
    						StringUtils.collectionToCommaDelimitedString((Collection<?>) authorities));
    			}
    			throw new IllegalArgumentException("Authorities must be either a String or a Collection");
    		}
    	}
    }
    

    类注释已经说明清楚了,这里就不在赘言了。

    资源服务配置类改造:OAuth2ResourceConfig

    修改accessTokenConverter()方法:也就是加入一行代码:converter.setAccessTokenConverter(new CustomerAccessTokenConverter());,将刚才新增的类添加进来;

    @Bean
    @Profile("jwt")
    public JwtAccessTokenConverter accessTokenConverter() {
    	......略
    	converter.setAccessTokenConverter(new CustomerAccessTokenConverter());
    	return converter;
    }
    

    到这里,就算是已经完成了

    公共方法

    现在要做的,就是提供一个公共方法,来获取当前用户的信息,其中包含我们的自定义信息。

    public interface CurrentUserUtil {
    	
    	/**
    	 * 获取当前登录人的信息
    	 * @author FYK
    	 * @return
    	 */
    	 public static LoginUserInfo getCurrentLoginUser() {
    		Log log = LogFactory.getLog(CurrentUserUtil.class);
    		LoginUserInfo loginUserInfo = new LoginUserInfo();
    		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    		@SuppressWarnings("unchecked")
    		Map<String, ?> map = (Map<String, ?>) authentication.getPrincipal();
    		try {
    			BeanUtils.populate(loginUserInfo, map);
    		} catch (IllegalAccessException | InvocationTargetException e) {
    			loginUserInfo = null;
    			log.error(e.getMessage());
    		}
    		return loginUserInfo;
    	}
    	
    }
    

    这里的LoginUserInfo是一个简单的pojo对象,作用是将传递的信息,保存下来。只要这个对象的属性和传递的信息的key值相同,就可以填充好了。

    展开全文
  • User user = (User) SecurityUtils.getSubject().getPrincipal();
    User user = (User) SecurityUtils.getSubject().getPrincipal();
    展开全文
  • java后台获取登录信息

    2018-11-03 01:40:24
    中软的框架... String userName = Context.getInstance().getCurrentUserid(); 这是获取 当前登录用户的 用户名的方法 有没有知道 它是怎么实现的? 怎么配置?才能拿到当前用户名
  • 后台获取用户登录信息

    千次阅读 2020-03-03 10:26:46
    title: 后台获取用户登录信息 date: 2019-11-28 原本在个人博客上写了一些博文,现转移到CSDN上 后台获取用户登录信息 如何从后台将用户的登录信息拿到,在写一些需要判断是否登录以及获取当前登录信息时是十分...

    title: 后台获取用户登录信息
    date: 2019-11-28

    原本在个人博客上写了一些博文,现转移到CSDN上

    后台获取用户登录信息

    如何从后台将用户的登录信息拿到,在写一些需要判断是否登录以及获取当前登录者信息时是十分必要的。获取用户登录信息就用到了HttpServletRequest request
    首先需要将用户的登录信息存储到session中,才能从session中获取已登录的用户的信息。session中还可以设置用户登录信息过期时间。

        @RequestMapping(value = "/in", method = RequestMethod.POST)
        public String login(@RequestParam(value = "account") String account,
                            @RequestParam(value = "password_md5") String password,
                            HttpServletRequest request) {
    
            System.out.println("in");
            String ip = IpUtil.getIpAddr(request);
            System.out.println(ip);
            JSONObject result = userService.validPassword(account, password, ip);
            if (result != null) {
                // 密码验证成功,将用户数据放入到Session中
                HttpSession session = request.getSession();
                session.setMaxInactiveInterval(60*60);//设置session过期时间 为60分钟
                session.setAttribute("oid", result.get("oid"));
                session.setAttribute("uid", result.get("uid"));
                session.setAttribute("name", result.get("name"));
    
                WebSocketTest webSocketTest = new WebSocketTest(); //发送websocket信息
                webSocketTest.sendMessageToAll("user change");
    
                return "1";
            }
    
            return "0";
        }
    

    session信息存储之后,即可在你需要的地方通过session获取当前用户登录的信息

        @RequestMapping(value = "/addTheme", method = RequestMethod.POST)
        public JsonResult addTheme(HttpServletRequest request) throws IOException {
            HttpSession session = request.getSession();
    
            if(session.getAttribute("uid") == null){
                return ResultUtils.error(-1, "no login");
            }
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile file = multipartRequest.getFile("info");
            String model = IOUtils.toString(file.getInputStream(), "utf-8");
            JSONObject jsonObject = JSONObject.parseObject(model);
            ThemeAddDTO themeAddDTO = JSONObject.toJavaObject(jsonObject, ThemeAddDTO.class);
            themeAddDTO.setCreator_name(session.getAttribute("name").toString());
            themeAddDTO.setCreator_oid(session.getAttribute("oid").toString());
    
            String uid = session.getAttribute("uid").toString();
    
            System.out.println("add theme");
    
            Theme theme = repositoryService.insertTheme(themeAddDTO, uid);
    
            userService.themePlusPlus(uid);
            return ResultUtils.success(theme.getOid());
        }
    

    首先HttpSession session = request.getSession();
    利用session来获取当前用户的属性,包括uid、name、oid等

    • 获取属性,赋值给DTO
      String uid =session.getAttribute(“uid”).toString();获取当前登录者的信息,取uid赋值给uid字符串
    • 判断是否登录
      if(session.getAttribute(“uid”) == null),为null时即可返回-1,未登录状态
    展开全文
  • //将验证通过后的用户信息放到请求中 httpServletRequest.setAttribute("currentUser", user); return true; } } return true; } @Override public void postHandle(HttpServletRequest ...
  • Vue 前台登陆之后 登录人信息及token 存储 1、登录成功后将后台返回的token和user存在store handleSubmit2: function () { this.$refs.ruleForm2.validate((valid) => { if (valid) { var loginParams = {...
  • 但是目前还用不到Shiro的高级权限,只为了简单获取用户信息,自己整合了一个只记录用户,获取用户信息的功能。 导入Shiro依赖 <!-- Shiro --> <dependency> <groupId>org.apache.shiro</...
  • Java 获取系统当前登录用户信息

    千次阅读 2020-11-10 16:47:41
    //获取当前的日期 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 if (!StringUtil.isNullOrSpace(paraMap.get("id"))) { Tbz4BaseEntity entity=new Tbz4BaseEntity(); // ...
  • Jeecg_boot后端获取登录用户信息

    千次阅读 2020-12-02 08:51:34
    Jeecg_boot后端获取登录用户信息 1.获取方法 代码如下(示例): LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = loginUser.getId(); String username = ...
  • 获取当前用户信息怎么办? 我们知道spring oauth2是基于spring security的实现的。 spring security可以通过SecurityContextHolder.getContext().getAuthentication().getPrincipal()获取到当前用户信息。 而...
  • 有好几位小伙伴小伙伴曾向松哥求助过这个问题。 一开始我觉得这可能是一个小...如果使用了 Spring Security,当我们登录成功后,可以通过如下方式获取到当前登录用户信息: SecurityContextHolder.getContext()....
  • 1、首先一个简单的需求:微信小程序登录后,获取用户的信息,跳转到主页面,点击个人中心时,页面显示用户的个人信息。 2、文件夹目录 login文件夹主要存放有关登录的操作和页面: wxml页面代码: <!--...
  • Spring Security - 获取当前登录用户的详细信息 在Spring框架里面,可以通过以下几种方式获取到当前登录用户的详细信息: 1. 在Bean中获取用户信息 Authentication authentication = SecurityContextHolder....
  • } 4、Controller层 因为是在登录后才允许获取当前用户信息,所以在 @RequestMapping("/member") public class UserController 中添加获取账号信息的Controller层代码 @GetMapping("getUsers") @ResponseBody public...
  • jeesite shiro获取登录用户信息

    千次阅读 2019-03-20 16:18:25
    shiro 管理登录,获取登录信息的方式常用的是: Subject sub = SecurityUtils.getSubject(); Object obj = sub.getPrincipal(); 这里的 obj 是字符串,还是某个实体,取决于 ShiroRealm 类的设置值,代码如下: @...
  • jsp头部加上: &lt;%@ taglib uri =“http://java.sun.com/jsp/jstl/core”prefix =“c”%&...gt; body中调用: ${customername} ${sessionScope.customername} ...%=request.getSession().getAttribute("......
  • JEECG获取当前登录人的值

    千次阅读 2017-02-27 15:44:00
    TSUser user = ResourceUtil.getSessionUserName();//老版本 TSUser user = ResourceUtil.getSessionUser();//新版本 mv.addObject("fbillerid", user.getUserName()); 转载于:...
  • 1、获取用户登录ip //获取用户登录ip; String loginIp = request.getHeader("X-Forwarded-For"); if (loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) { loginIp = request....
  • 我用的是MySQL,做了一个登录界面,注册的的时候有很...比如我现在要获取已经登录的用户abc的全部信息存入session中,并在其他页面中调用,代码应该怎么写?用电话tel举个例子就好,我再对照着自己摸索一下,感激不尽。
  • 原文地址:... 一、设置用户发起 identityService.setAuthenticatedUserId( user.getUsername()); 认证用户的作用是设置流程发起:在流程开始之前设置,会自动在表ACT_HI_PROCINST 中的STAR...
  • 如何使用session获取登录用户的信息

    万次阅读 2019-07-15 15:12:18
    1.你必须在登录成功时候,获取用户对象及user,然后把这个对象放入session中, 以后用该对象直接从session中获取就行。不过session失效后,该用户就被清空了。 2.代码 Map <String, Object> session = ...
  • Yii用户登录信息获取用户ID

    千次阅读 2017-04-06 18:19:08
    Yii框架中,用户登陆信息, 检验用户登录信息
  • 用Java实现自动登录获取用户信息

    万次阅读 2018-05-04 18:06:37
    题目要求: 通过访问武夷山门票预订网w.wyschina.com先注册一个账号...答:网站分析后发现可以使用post请求加上参数进行登录,参数有用户名,密码,验证码组成 访问验证码的连接可以得到验证码图片流访问 http://s...
  • 首先,先理清楚微信登录的两种实现途径(这里我们先演示一种)1.微信开放平台实现,2.微信公众号(微信公众平台)实现。 因为微信登录不同与QQ登录,微信登录只提供扫码方式登录,并不像其他应用登录让用户输入用户名,...
  • NC获取当前登录用户的上下文信息

    千次阅读 2018-06-28 14:04:22
    LoginContext context = getModel().getContext(); String userId = context.getPk_loginUser(); String pkgroup = context.getPk_group(); Object data = getModel().getSelectedData();
  • 钉钉免登陆,并获取用户信息

    热门讨论 2018-05-03 10:30:46
    该程序集成了 PC端(手机端一样,js部分 换成 dd. 就可以了) 钉钉免登陆,并且获取用户信息
  • 参数 authentication 获取信息 却是 ROLE_ANONYMOUS 状态的,获取的并不是当前登录人所拥有的信息。 代码1:登陆成功后的操作 ![图片说明](https://img-ask.csdn.net/upload/201708/13/1502590057_949179.png) ...
  • springcloud 前后端分离 登录用户信息获取

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 205,814
精华内容 82,325
关键字:

获取网站登录人信息