首页 > 解决方案 > 如何在 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);
    }

标签: javascriptajaxspring-bootjsphttpsession

解决方案


推荐阅读