我正在處理應用程序,並且可能遇到會話處理中的錯誤。Java Spring - 爲用戶處理創建單個會話
基本上有登錄用戶,註銷用戶和獲取存儲的用戶。
- 但我想當我調用函數時,它會每次創建一個不同的會話?所以我想創建一個控制器,可以創建一個會話,並從此讀取..但我越來越像錯誤 - 更改getSession靜態..
在我的主要應用程序我將如何調用這些函數,只是通過一個會話?
會話控制器看起來像這樣。
package controller;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.json.simple.JSONObject;
@SuppressWarnings("serial")
public class SessionController extends HttpServlet{
HttpServletRequest request;
SessionController(HttpServletRequest request){
HttpSession session = request.getSession(true);
}
HttpSession getSession(){
HttpSession session = this.request.getSession(true);
return session;
}
@SuppressWarnings("unchecked")
public static JSONObject getLoggedUser() {
session = getSession();
JSONObject user = (JSONObject) session.getAttribute("user");
System.out.println("session getLoggedUser>>>"+session);
System.out.println("---session login user>>>"+session.getAttribute("user"));
return user;
}
public static void logUser(JSONObject object) {
session = getSession();
//store user details
session.setAttribute("user", object);
System.out.println("session login>>>"+session());
System.out.println("---session login user>>>"+session.getAttribute("user"));
}
public static void logOutUser() {
session = getSession();
session.removeAttribute("user");
System.out.println("session logout>>>"+session);
System.out.println("---session login user>>>"+session.getAttribute("user"));
}
}
,併爲MyService我有這樣
@SuppressWarnings("unchecked")
@RequestMapping(value = "/login", method = RequestMethod.GET)
@CrossOrigin(origins = {"*"})
@ResponseBody
public ResponseEntity<?> login(
@RequestParam(value="email", required=false, defaultValue="email") String email,
@RequestParam(value="password", required=false, defaultValue="password") String password,
HttpServletRequest request
) throws Exception {
System.out.println("email email>>>"+email);
System.out.println("email password>>>"+password);
//find matching account with email
TblLogin checkAccount = tblLoginRepository.findByEmail(email);
if (checkAccount != null) {
//do the passwords match
if(passwordEncoder.matches(password, checkAccount.getPassword())) {
// Encode new password and store it
System.out.println("PASSWORD MATCH");
//build clean user object
JSONObject userDetails = new JSONObject();
//create user object
userDetails.put("id", checkAccount.getId());
userDetails.put("email", checkAccount.getEmail());
userDetails.put("password", checkAccount.getPassword());
userDetails.put("pin", checkAccount.getPin());
//attempt look up to get patient information and append to response
try {
TblPatient extInformation = tblPatientRepository.findByPatientID(checkAccount.getPin());
userDetails.put("forename", extInformation.getForename());
userDetails.put("surname", extInformation.getSurname());
userDetails.put("dateOfBirth", extInformation.getDateOfBirth());
userDetails.put("genderID", extInformation.getGenderID());
}
catch (Exception e) {
userDetails.put("forename", null);
userDetails.put("surname", null);
userDetails.put("dateOfBirth", null);
userDetails.put("genderID", null);
}
//store user in session
SessionController mySession = new SessionController(request);
mySession.logUser(userDetails);
//userDetails.put("session", session);
//System.out.println("session>>>"+session.getAttribute("user"));
//System.out.println("newAcc>>>"+checkAccount);
JSONObject response = ResponseWrapper(null, "success", "User found login succesful");
return new ResponseEntity<>(response, HttpStatus.OK);
} else {
//create error response
JSONObject response = ResponseWrapper(null, "error", "User passwords do not match");
//System.out.println("user PASSWORD error >>>"+response);
return new ResponseEntity<>(response, HttpStatus.OK);
}
} else{
//create error response
JSONObject response = ResponseWrapper(null, "error", "User has not been found");
//System.out.println("user does not exist >>>"+response);
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
登錄方法,我需要做的是這樣
HttpSession mySession = new SessionController();
更新1.
我我們看到了最新的代碼庫是。
getHome - 會做一個查找表所存儲的用戶會話
登錄 - 將創建用戶會話
註銷 - 將刪除用戶在會話
MyService類 - 現在我需要將mySession作爲全局變量存儲 - 並讓它生成JUST ONCE?在MyService控制器中哪裏需要請求?
package controller;
@RestController
public class MyService {
//api/getHome
@SuppressWarnings("unused")
@RequestMapping(value = {"/api/getHome"}, method = RequestMethod.GET)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> getHome(
HttpServletRequest request
) throws Exception {
SessionController mySession = new SessionController(request);
JSONObject user = mySession.getLoggedUser();
System.out.println("logged in user"+ user);
//get Home Data
MyApiHome myApiHome = new MyApiHome();
JSONArray data = myApiHome.getHomeData();
System.out.println("myHomedata"+ data);
JSONObject response = ResponseWrapper(data, "success", "Fetching home data");
return new ResponseEntity<>(response, HttpStatus.OK);
//getHome service
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/login", method = RequestMethod.GET)
@CrossOrigin(origins = {"*"})
@ResponseBody
public ResponseEntity<?> login(
@RequestParam(value="email", required=false, defaultValue="email") String email,
@RequestParam(value="password", required=false, defaultValue="password") String password,
HttpServletRequest request
) throws Exception {
System.out.println("email email>>>"+email);
System.out.println("email password>>>"+password);
//find matching account with email
TblLogin checkAccount = tblLoginRepository.findByEmail(email);
if (checkAccount != null) {
//do the passwords match
if(passwordEncoder.matches(password, checkAccount.getPassword())) {
// Encode new password and store it
System.out.println("PASSWORD MATCH");
JSONObject userDetails = getUserData(checkAccount);
//store user in session
SessionController mySession = new SessionController(request);
JSONObject user = mySession.logUser(userDetails);
System.out.println("logged in user"+ user);
JSONObject response = ResponseWrapper(null, "success", "User found login succesful");
return new ResponseEntity<>(response, HttpStatus.OK);
} else {
//create error response
JSONObject response = ResponseWrapper(null, "error", "User passwords do not match");
//System.out.println("user PASSWORD error >>>"+response);
return new ResponseEntity<>(response, HttpStatus.OK);
}
} else{
//create error response
JSONObject response = ResponseWrapper(null, "error", "User has not been found");
//System.out.println("user does not exist >>>"+response);
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/logout", method = RequestMethod.GET)
@CrossOrigin(origins = {"*"})
public ResponseEntity<?> logout(
HttpServletRequest request
) throws Exception {
//List<TblLogin> acc = (List<TblLogin>) session.getAttribute("user");
//HttpSession session = request.getSession();
//session.removeAttribute("user");
//log user out of session
//SessionController.logOutUser(request);
SessionController mySession = new SessionController(request);
JSONObject user = mySession.logOutUser();
//create success response
JSONObject response = ResponseWrapper(null, "success", "User logged out");
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
這就是我的SessionController的樣子。
package controller;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.json.simple.JSONObject;
@SuppressWarnings("serial")
public class SessionController {
private HttpServletRequest request;
SessionController(HttpServletRequest request){
//HttpSession session = request.getSession(true);
this.request = request;
}
HttpSession getSession(){
HttpSession session = this.request.getSession(true);
return session;
}
@SuppressWarnings("unchecked")
public JSONObject getLoggedUser() {
HttpSession session = getSession();
JSONObject user = (JSONObject) session.getAttribute("user");
System.out.println("session getLoggedUser>>>"+session);
System.out.println("---session login user>>>"+session.getAttribute("user"));
return user;
}
public JSONObject logUser(JSONObject object) {
HttpSession session = getSession();
//store user details
session.setAttribute("user", object);
JSONObject storedUser = (JSONObject) session.getAttribute("user");
System.out.println("session login>>>"+session);
System.out.println("---session login user>>>"+storedUser);
return storedUser;
}
public void logOutUser() {
HttpSession session = getSession();
session.invalidate();
//session.removeAttribute("user");
System.out.println("session logout>>>"+session);
System.out.println("---session login user>>>"+session.getAttribute("user"));
return null;
}
}
會話登錄>>> org.apache.cata[email protected] 會議getLoggedUser >>> [email protected] –
這樣的會議是不同的吧? StandardSessionFacade @ –