angularjs给Model添加拦截过滤器,路由增加限制,实现用户登录状态判断

使用angularjs的但页面应用时,由于是本地路由在控制页面跳转,但是有的时候我们需要判断用户是否登录来判断用户是否能进入界面。

angularjs是mvc架构所以实现起来很容易也很灵活,我们只MainController里增加一个路由事件侦听并判断,这样就可以避免未登录用户直接输入路由地址来跳转到登录界面地址了

代码中的 $rootScope.user是登录后把用户信息放到了全局rootScope上,方便其他地方使用,$rootScope.defaultPage也是默认主页面,初始化的时候写死到rootScope里的。

1
2
3
4
5
6
7
8
$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
if(toState.name=='login')return;// 如果是进入登录界面则允许
// 如果用户不存在
if(!$rootScope.user || !$rootScope.user.token){
event.preventDefault();// 取消默认跳转行为
$state.go("login",{from:fromState.name,w:'notLogin'});//跳转到登录界面
}
});

另外还有用户已经登录,但是登录超时了,还有就是增加后台接口的判断来增强安全性。不能完全依靠本地逻辑

我们在model里面增加一个用户拦截器,在rensponseError中判断错误码,抛出事件让Contoller或view来处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
app.factory('UserInterceptor', ["$q","$rootScope",function ($q,$rootScope) {
return {
request:function(config){
config.headers["TOKEN"] = $rootScope.user.token;
return config;
},
responseError: function (response) {
var data = response.data;
// 判断错误码,如果是未登录
if(data["errorCode"] == "500999"){
// 清空用户本地token存储的信息,如果
$rootScope.user = {token:""};
// 全局事件,方便其他view获取该事件,并给以相应的提示或处理
$rootScope.$emit("userIntercepted","notLogin",response);
}
// 如果是登录超时
if(data["errorCode"] == "500998"){
$rootScope.$emit("userIntercepted","sessionOut",response);
}
return $q.reject(response);
}
};
}]);

别忘了要注册拦截器到angularjs的config中哦

1
2
3
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('UserInterceptor');
});

最后在controller中处理错误事件

1
2
3
4
$rootScope.$on('userIntercepted',function(errorType){
// 跳转到登录界面,这里我记录了一个from,这样可以在登录后自动跳转到未登录之前的那个界面
$state.go("login",{from:$state.current.name,w:errorType});
});

最后还可以在loginController中做更多的细节处理

1
2
3
4
5
// 如果用户已经登录了,则立即跳转到一个默认主页上去,无需再登录
if($rootScope.user.token){
$state.go($rootScope.defaultPage);
return;
}

另外在登录成功回调后还可以跳转到上一次界面,也就是上面记录的from

1
2
var from = $stateParams["from"];
$state.go(from && from != "login" ? from : $rootScope.defaultPage);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在使用JSP整合Spring Boot的项目中配置拦截实现登录,您可以按照以下步骤操作: 1. 创建一个拦截器类,实现HandlerInterceptor接口,并实现其preHandle、postHandle和afterCompletion方法,用于在请求处理前、处理后和完成后执行相应的操作,比如验证登录信息、记录日志等。 2. 修改Spring Boot的配置文件application.properties,添加配置项,使Spring Boot能够扫描到拦截器类。例如: ``` # 拦截器配置 # 拦截器类所在的包名 spring.mvc.interceptor.exclude=*.css,*.js,/login spring.mvc.interceptor.include=/admin/** ``` 在上面的配置中,exclude表示不需要拦截的请求,include表示需要拦截的请求。这里我们设置只拦截/admin/下的请求。 3. 创建一个Controller类,用于处理用户登录请求。在该类中,可以使用@SessionAttribute注解将用户登录信息存储到Session中,以便在其他页面中进行验证。例如: ``` @Controller public class LoginController { @Autowired private UserService userService; @RequestMapping("/login") public String login(String username, String password, Model model, HttpSession session) { User user = userService.checkLogin(username, password); if (user != null) { session.setAttribute("user", user); return "redirect:/admin/index"; } else { model.addAttribute("msg", "用户名或密码错误!"); return "login"; } } } ``` 4. 在JSP页面中,使用JSTL标签库或EL表达式获取Session中的用户信息,以便进行权限验证。例如: ``` <c:if test="${not empty sessionScope.user}"> <a href="/logout">退出</a> </c:if> ``` 在上面的代码中,如果Session中存在user对象,则显示退出链接,否则不显示。 以上就是使用JSP整合Spring Boot配置拦截实现登录的基本步骤,您可以根据实际需求进行相应的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值