java_后端获取当前登录用户信息

后端获取当前登录用户信息

开发过程中,发现有很多地方需要获取当前登录的用户信息,比如新增、修改时候要记录创建人和更新人信息,如果每次操作都从数据库中获取用户信息,会增加不必要的开销,同时也增加数据库的压力。

方法一: 从redis中获取

本文将介绍一种从redis缓存中获取当前登录用户的信息,实现思路如下:

  • 用户登录时获取将用户数据存放在redis中,key值为userCode
  • 将userCode添加到cookie中
  • 后端获取cookie中的userCode,然后查询缓存,获取用户登录数据
实现代码如下:
  1. 存放用户信息到redis中, 并设置cookie
	/**
	 * 存放用户信息到redis中, 并设置cookie
	 * @param String username	// 用户账号
	 * @return
	 */
    public static final long SESSION_TIMEOUT = Long.parseLong(prop.getProperty("session.timeout","1440000"));
    public static final String USER_INFO = "user_info_";


    public void setUserInfoToRedis(HttpServletRequest request,String username, HttpServletResponse response){

        SysUser user = userService.selectOne(new EntityWrapper<SysUser>().eq("LOGIN_NAME", username));	//根据登录账号查询用户信息
        UserSessionModel userSessionModel = new UserSessionModel();
        userSessionModel.setUser(user);

        // 放入缓存中
        String userCode = UUIDGenerator.getUUID();	// 随机生成userCode
        String userKey = Constants.USER_INFO + userCode;
        redisUtils.set(userKey, JSON.toJSONString(userSessionModel), Constants.SESSION_TIMEOUT);

        // 将userCode放入cookie中
        Cookie cookie = new Cookie("userCode", userCode);
        cookie.setPath("/");
        cookie.setMaxAge((int) Constants.SESSION_TIMEOUT);
        response.addCookie(cookie); 

    }
  1. 从redis中获取当前登录用户信息:
	public static final String USER_INFO = "user_info_";

	@Autowired
    private HttpServletRequest request;

	@Autowired
	private RedisUtils redisUtils;
    /**
        从redis中获取当前登录用户信息
    */
    public SysUser getCurrentUser() {
        Cookie userCookie = CookieUtil.getCookie(request, "userCode");
        String userKey = Constants.USER_INFO + userCookie.getValue();
        Object userInfo = redisUtils.get(userKey);
        UserSessionModel userSessionModel = JSON.parseObject(userInfo.toString(), UserSessionModel.class);
        SysUser user = userSessionModel.getUser();
        return user;
    }

方法二: 通过Spring Security获取

Spring Security使用一个Authentication对象来描述当前用户的相关信息。SecurityContextHolder中持有的是当前用户的SecurityContext,而SecurityContext持有的是代表当前用户相关信息的Authentication的引用。这个Authentication对象不需要我们自己去创建,在与系统交互的过程中,Spring Security会自动为我们创建相应的Authentication对象,然后赋值给当前的SecurityContext。

UserDetails currentUserDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用第三方的天气API来获取当前的天气信息。以下是使用Java后端获取当前天气的一种方法: 1. 首先,您需要找到一个可用的天气API供应商,并注册一个账号来获取API密钥。一些常用的天气API供应商包括:OpenWeatherMap、WeatherAPI、和AccuWeather等。 2. 使用Java的网络请求库(如OkHttp或HttpClient)发送HTTP请求到天气API的接口,并传递必要的参数,如城市名称或经纬度。 3. 解析API返回的JSON数据,提取您所需的天气信息,如温度、天气状况、湿度等。 以下是一个简单的示例代码,使用OpenWeatherMap API获取当前天气: ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.json.JSONObject; public class WeatherApiClient { private static final String API_KEY = "YOUR_API_KEY"; private static final String API_URL = "https://api.openweathermap.org/data/2.5/weather"; public static void main(String[] args) { String city = "Beijing"; // 替换为您需要查询的城市名称 try { OkHttpClient client = new OkHttpClient(); String url = API_URL + "?q=" + city + "&appid=" + API_KEY; Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseData = response.body().string(); JSONObject json = new JSONObject(responseData); double temperature = json.getJSONObject("main").getDouble("temp"); int humidity = json.getJSONObject("main").getInt("humidity"); String weatherDescription = json.getJSONArray("weather").getJSONObject(0).getString("description"); System.out.println("Temperature: " + temperature); System.out.println("Humidity: " + humidity); System.out.println("Weather: " + weatherDescription); } else { System.out.println("Error: " + response.code() + " - " + response.message()); } } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,您需要将`YOUR_API_KEY`替换为您的实际API密钥。此示例仅提供了基本的获取当前天气信息的功能,您可以根据具体需求进行扩展和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值