我搜索了很多资源,但没有一个适合我的问题。我正在处理single page application (SPA)
项目,每当他刷新页面时我都需要logged in user
到stay logged in
但 没有 路由。
我试图在页面的主session authentication servlet
中调用controller
(此servlet会检查会话是否存在),但它不起作用。
注意:会话是在用户log in
或sing up
后创建的。
这是SessionAuthServlet.java
:
HttpSession session = request.getSession(true);
User u=(User) session.getAttribute("usersession");
try{
response.setContentType("application/json; charset=UTF-8");
PrintWriter out = response.getWriter();
if(u != null)
{
out.println("{\"+success+\"}");
out.close();
}
else
{
out.println("{ \"result\": \"fail\"}");
out.close();
}
}catch (IOException e) {
e.printStackTrace();
}
HTML单页面应用程序中的 MainController
:
appvar.controller('MianController',['$scope','$http','$rootScope',function($scope, $http,$rootScope) {
$rootScope.sessionvalid=function(){
$http.get("http://localhost:8080/MyProject/SessionAuthServlet")
.success(function(response) {
if (response.result=="fail")
{
//***Show the view for not logged user
}
//***Show the view for logged user
}
$rootScope.sessionvalid();
});
}
}]);
任何想法如何处理这个?
请指导我
由于
答案 0 :(得分:0)
以下是在不使用路由的情况下在页面刷新后保持记录的方法。 您将需要以下三件事
服务代码 -
app.service('AuthenticationService', function() {
var auth = {
isLogged: false,
email:"",
isAdmin:false
}
return auth;
});
在您的MainController中,一旦用户登录,设置Service AuthenticationService.isLogged = true和$ window.sessionStorage = userInfo
拦截器代码 -
app.service('TokenInterceptor', function ($q, $window, $location, AuthenticationService) {
return {
request: function (config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
return config;
},
/* Set Authentication.isAuthenticated to true if 200 received */
response: function (response) {
if (response != null && response.status == 200 && $window.sessionStorage.token && !AuthenticationService.isAuthenticated) {
AuthenticationService.isAuthenticated = true;
}
return response || $q.when(response);
}
};
});
并在你的app.config块中添加 -
app.config(function($httpProvider){
$httpProvider.interceptors.push(TokenInterceptor);
})
现在,即使页面被引用,您的AuthenticationService.isLogged也将保持为真,您可以在服务中获取登录的用户信息。