【发布时间】:2015-07-20 11:11:11
【问题描述】:
我正在使用前端的 Angular 和后端的 Java Servlet 创建一个 Web 门户。该页面以登录页面开始,它接受输入并将其发送到 servlet。服务器验证并使用具有用户名和他的权限的 JSON 对象进行响应。我将值设置为注入控制器的服务。然后我使用$windows.location 将网页更改为主页,即仪表板。现在我想在主页的控制器中使用这个服务。但是由于页面更改,我无法维护$scope。
所以我想到了使用 response.redirect() 重定向到后端的主页。但是我不知道如何在重定向后在主页中获取用户详细信息。就像我如何将用户对象传递给Home.java servlet
这是我的 LoginCtrl.js
if (isValid) {
$http({
method : 'POST',
url : 'login',
data : JSON.stringify($scope.user),
headers : {
'Content-Type' : 'application/json'
}
}).success(function(data) {
if (!("failure" == data)) {
console.log(data);
var user = {};
user.name = data.name;
user.permissions = data.permissions;
MyService.setUser(user); // set the values for user
$window.location.href = 'main.jsp';
} else {
$scope.information = "Invalid username/password!"
}
}).error(function(data) {
console.log(data);
});
这是我的 Login.java servlet
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonObject obj = (JsonObject) parser.parse(request.getReader());
String username = "";
String password = "";
if (obj.get("name") != null & obj.get("password") != null) {
username = obj.get("name").getAsString();
password = obj.get("password").getAsString();
}
System.out.println("Username :" + username);
System.out.println("Password :" + password);
// Passing username and password to Context and validate.
// If authentication successful, set user object with details and return
// it
// User user = (User) Context.Authorized(username,password)
// for testing
User user = new User();
user.setName(username);
user.setPermission("crwd");
user.setAuthorized(true);
response.setContentType("text/html");
if (user.getAthorized()) {
String responseJSON = gson.toJson(user);
response.getWriter().write(responseJSON);
} else {
response.getWriter().write("failure");
}
}
请告诉我我的要求是否可以在 Angular 中实现,或者是否可以使用 Java 来实现,那么如何?
【问题讨论】:
-
您可以使用本地存储来保存数据。用户登录后,将响应保存在浏览器的本地存储中,然后无论重定向如何,此数据都将在您的整个站点中可用。
-
本地存储是使用 Angular 还是使用 Java?你能给我一个在谷歌搜索的关键字吗?
-
你可以在$rootScope而不是$scope中维护信息。它将在整个应用程序中可用
-
但重定向页面后,服务状态是否仍然存在于$rootScope中
-
它的纯js,看这个:设置:localStorage.setItem("FName", User.FName);并获得价值: var FName= localStorage.getItem("FName");
标签: javascript java angularjs servlets