我正在使用public class BidMonitor extends Thread
{
public synchronized void run()
{
while (valueHeldOnClient == valueHeldOnServer)
{
wait();
}
valueHeldOnClient = valueHeldOnServer;
notifyAll();
}
}
(0.2.18),如果用户未登录或不允许查看内容,我想限制对某些页面的访问。
我想出了下面的解决方案,但即使我没有登录,我仍然可以看到该页面一秒钟,然后我被重定向到UserID
页面。显然这很难看,如何在加载页面之前进行检查?我正在努力寻找模块化解决方案。
我做后端检查,所以如果用户没有登录,他/她无论如何都看不到任何东西,但是这个重定向的东西让我感到烦恼。
厂
$UserID
路线
$UserID = 1
答案 0 :(得分:3)
这是一个基于我检查状态的应用程序的示例。需要注意的主要事项是:
在状态上使用数据属性,因为子状态将继承其父项的数据属性。这将允许所需的身份验证免费传播到子状态。
您正在检查用户是否已登录正在使用http请求,这很糟糕,因为您会因延迟而遇到延迟。如果用户已登录,您应该使用服务变量或会话存储来保存标志,这样在检查身份验证状态时不会有延迟。
希望这会有所帮助:
var core = angular.module("core", ["ui.router", "ngStorage"]);
core.run(["$rootScope", "$state", "AuthService", function ($rootScope, $state, Auth) {
$rootScope.$on("$stateChangeStart", function (evt, toState, toParams, fromState, fromParams) {
if (toState.name !== "login" &&
_.get(toState, "data.authenticate", false) &&
!Auth.isLoggedIn()) {
$state.go("login");
evt.preventDefault();
}
});
}]);
core.factory("AuthService", ["$http", "$sessionStorage", "$q",
function ($http, $sessionStorage, $q) {
return {
isLoggedIn: function () {
return !!$sessionStorage.user;
},
localLogin: function (email, password) {
var def = $q.defer();
$http
.post("/login", { email: email, password: password })
.then(function (res) {
if (_.has(res, "data.error")) {
def.reject(res.data.error);
} else {
$sessionStorage.user = res.data.user;
def.resolve();
}
})
.catch(function (err) {
def.reject(err);
});
return def.promise;
}
};
}]);
core.config(["$stateProvider", "$urlRouterProvider",
function ($stateProvider, $urlRouterProvider) {
// For all unmatched url, redirect to /login
$urlRouterProvider.otherwise("/login");
$stateProvider
.state("login", {
url: "/login",
views: {
"": {
templateUrl: "app/core/templates/login.html",
controller: "core.login.ctrl",
controllerAs: "vm"
}
}
})
.state("profile", {
url: "/profile",
data: {
authenticate: true
},
views: {
"": {
templateUrl: "app/core/templates/profile.html",
controller: "core.ctrl",
controllerAs: "vm"
}
}
});
}]);