我正在使用前端的Angular和后端的Java Servlets创建一个Web门户。页面以登录页面开始,它接受输入并将其发送到servlet。服务器使用具有用户名和权限的JSON对象进行验证和响应。我将值设置为一个注入Controller的服务。然后我使用$windows.location
将网页更改为主页,即主页。现在我想在主页的控制器中使用此服务。但由于页面更改,我无法维护$scope
。
所以我想到了使用response.redirect()
重定向到后端的主页。但我不知道如何在重定向后在主页中获取用户详细信息。就像我如何将User对象传递给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完成,那么如何?
答案 0 :(得分:0)
如果您重定向到另一个页面,将会有完全不同的Angular应用程序,您将失去服务状态。
您可以制作单页应用程序,并对登录页面和主页导航栏使用$ routeProvider和ng-view。
或者您的应用可以包含不同的页面,但是在每个页面中您都必须调用服务器来获取用户信息