java使用session存登录的用户信息

创建账户model:

public class Account {

    private Integer id;
    /**
     * 联系人名称
     */
    private String userName;
    /**
     * 手机
     */
    private String phone;
    /**
     * 公司名称
     */
    private String company;

    public Account() {
    }

    public Account(Integer id, String userName, String phone, String company) {
        this.id = id;
        this.userName = userName;
        this.phone = phone;
        this.company = company;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }
}

创建基础控制器,里面实现session存和取的方法:


/**
 * 基础控制器
 *
 * @author tuc
 */
public abstract class BaseController {

    /**
     * 当前账号常量
     */
    private static final String ACCOUNT = "account";


    private HttpServletRequest getRequest() {
        return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
    }

    public Account getAccount() {
        HttpSession session = getRequest().getSession();
        return (Account) session.getAttribute(ACCOUNT);
    }

    public void setAccount(Account account) {
        HttpSession session = getRequest().getSession();
        if (account != null) {
            session.setAttribute(ACCOUNT, account);
            //session过期时间设置,以秒为单位,即在没有活动30分钟后,session将失效
            session.setMaxInactiveInterval(30 * 60);
        }
    }

}

创建测试控制器继承基础控制器来进行测试:

/**
 * 测试Controller
 *
 * @author tuc
 */
@RestController
public class TestController extends BaseController {

    /***
     * 测试登录
     * 这里假设用户(userName=admin,password=123456)
     */
    @PostMapping("/login")
    public ResultModel login(String userName, String password) {
        try {
            Map<String, Object> map = new HashMap<>(1);
            if ("admin".equals(userName) && "123456".equals(password)) {
                //登录成功,开始缓用户信息(当前我使用假数据,真实情况是查询数据库获取)
                Account account = new Account();
                account.setId(1);
                account.setUserName("张三");
                account.setPhone("15388888888");
                account.setCompany("xx投资公司");
                setAccount(account);
            } else {
                return ResultTools.result(1003, "", map);
            }
            return ResultTools.result(0, "", map);
        } catch (Exception e) {
            return ResultTools.result(404, e.getMessage(), null);
        }
    }


    /***
     * 获取用户
     */
    @GetMapping("/getUser")
    public ResultModel getUser() {
        try {
            Map<String, Object> map = new HashMap<>(1);
            Account account = getAccount();
            if (account == null) {
                return ResultTools.result(1002, "", map);
            }
            map.put("account", account);
            return ResultTools.result(0, "", map);
        } catch (Exception e) {
            return ResultTools.result(404, e.getMessage(), null);
        }
    }

}

直接调用http://localhost:8080/getUser 结果如下:

代表我们没有登录过,或是session已过期。

 

然后我们先调用登录接口http://localhost:8080/login?userName=admin&password=123456

然后再调用http://localhost:8080/getUser 结果如下:

使用测试完成,谢谢阅读。

最后附上源码下载地址:https://download.csdn.net/download/qq_29370483/11193834

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值