javascript - 如何在 JSP 页面上检查登录的用户 HTTPSession
问题描述
我正在创建一个简单的应用程序,我想在其中显示一个导航栏我想要在其中做的是在第一次加载应用程序时,如果用户没有登录到应用程序,导航栏应该向用户显示两个按钮(注册和 Login ),在用户登录后,我想留在同一页面上,但按钮应更改为带有一些用户帐户设置的下拉菜单。我尝试了一种天真的方法来做到这一点,我正在做的是登录后我向我的控制器发送了一个请求,并检查是否为登录用户创建了一个会话。因此,我使用 ajax 将用户传递到前端,但这对我有用,但我不知道这是否是正确的方式?
请向我建议一种在 JSP 上处理登录用户会话的好方法 非常感谢
家庭控制器
@Controller
@RequestMapping("/Indoera")
public class MainController {
public static final Logger logger = LogManager.getLogger(MainController.class);
@RequestMapping("/home")
public String view() {
return "home";
}
@RequestMapping(value = "/getUser",method = {RequestMethod.GET,RequestMethod.POST})
public APIResponseModal getUser(HttpSession session) {
logger.info("I am called at main controller");
APIResponseModal apiResponseModal = new Utils().getDefaultApiResponse();
Users user = (Users) session.getAttribute("loggedInUser");
try {
if(Utils.isNotNull(user)) {
apiResponseModal.setData(user.toString());
apiResponseModal.setMessage("User Found");
apiResponseModal.setStatus(HttpStatus.OK);
}else {
apiResponseModal.setData(null);
}
} catch (Exception e) {
e.printStackTrace();
}
logger.info("API ::: " + apiResponseModal);
return apiResponseModal;
}
}
LoginMethod :我在哪里创建会话
@ResponseBody
@RequestMapping(value = "/validatelogin", method = {RequestMethod.POST})
public APIResponseModal validateLogin(@ModelAttribute UserDTO userDto, HttpSession session) {
APIResponseModal apiResponse = new Utils().getDefaultApiResponse();
List<String> errorList = new ArrayList<String>();
Users user = new Users();
try {
if(Utils.isNotNull(session)) {
if(Utils.isNotNull(userDto.getUserName()) && userDto.getUserName() !="" && Utils.isNotNull(userDto.getPassword()) && userDto.getPassword() !="") {
user = userService.validateUser(userDto, errorList);
if(errorList.isEmpty()) {
if(Utils.isNotNull(user)) {
if(user.getRole()==Constants.userRole.ADMIN) {
apiResponse.setData(user.toString());
apiResponse.setMessage("Welcome To IndoEra Cheif");
apiResponse.setStatus(HttpStatus.OK);
}else if(user.getRole() == Constants.userRole.STOREOWNER) {
apiResponse.setData(user.toString());
apiResponse.setMessage("Welcome To IndoEra");
apiResponse.setStatus(HttpStatus.OK);
}else {
apiResponse.setData(user.toString());
apiResponse.setMessage("Welcome To IndoEra");
apiResponse.setStatus(HttpStatus.OK);
}
session.setAttribute("loggedInUser", user);
}else {
apiResponse.setMessage(errorList.toString());
}
}else {
errorList.add(errorList.toString());//if errorList is not Empty from Validate login method
logger.info(errorList.toString());
apiResponse.setMessage(errorList.toString());
}
}else {
logger.info("Please enter User Name and Password");
apiResponse.setMessage("Please enter User Name and Password");
}
}else {
apiResponse.setMessage("You are already logged in Please refresh your Page");
}
} catch (Exception e) {
e.printStackTrace();
apiResponse.setMessage("We are having trouble to log you In");
}
return apiResponse;
}
Ajax JS 代码:我在哪里呈现导航栏 {请忽略 HTML 代码,因为我只是在检查这是否有效}
$(document).ready(function(){
var ajaxObject = new MasterAjax();
ajaxObject.requestType = "POST";
ajaxObject.url = "Indoera/getUser";
ajaxObject.contentType = false;
ajaxObject.enctype = false;
ajaxObject.requestData(function(responseData) {
if (responseData.status == "OK") {
console.log(responseData)
checkUser(responseData.data);
} else {
console.log(responseData);
checkUser(null);
}
});
});
function checkUser(user){
console.log("Check USer");
if(user !=null){
let= "Billo";
}else{
let = "hello";
}
$(".myCheck").html(let);
}
解决方案
推荐阅读
- c# - 将标头请求和标头响应添加到 serilog 中间件日志记录
- mysql - 不正确的整数值:第 2 行 MySQL 中列“变量”的“H”
- html - Chrome:CSS计算样式有一小部分不同
- go - 如何在不尝试存储的情况下验证 golang 中的模板?
- python - aiohttp 会话的 NTLM 身份验证
- c# - 如何在c#中将带分隔符的字符串转换为json字符串
- django - 将 PRIMARY KEY 约束添加到现有表
- node.js - NextJS 与 ExpressJS 服务器 ENV 变量在使用前未加载
- python - 使用 folium python 提取 json 数据以绘制地图时出错
- sql - 修复存储过程pl/sql中的代码(缺少右括号)