探索flutter框架开发的app在移动应用市场的潜力与挑战
1163
2022-10-17
SpringBoot-实现登录拦截的示例代码
可以对URL路径进行拦截,可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等
实现代码
新建 interceptor包
添加-代码
package com.qcby.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlethttp://.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private HttpSession httpSession;
//Controller逻辑执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle....");
String uri = request.getRequestURI();
System.out.println("当前路径"+uri);
/**
* HandlerMethod=>Controller中标注@RequestMapping的方法
* 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目
*/
if (!(handler instanceof HandlerMethod)) {
return true;
}
if (httpSession.getAttribute("username") == null) {
// 未登录跳转到登录界面
throw new RuntimeException("no login!");
} else {
return true;
}
}
//Controller逻辑执行完毕但是视图解析器还未进行解析之前
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle....");
}
//Controller逻辑和视图解析器执行完毕
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Ehttp://xception {
System.out.println("afterCompletion....");
}
}
注册,配置拦截路径和排除登录需访问路径
package com.qcby.config;
import com.qcby.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor())
.addPathPatterns("/**")
// 那些路径不拦截
.excludePathPatterns("/user/login","/error");
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
}
实现类
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private HttpSession session;
@ApiOperation("用户登录接口")
@RequestMapping(value="login",method = {RequestMethod.GET,RequestMethod.POST})
public Map
Map
map.put("code",0);
if(StringUtils.isEmpty(user.getUsername())||StriniiEFdgUtils.isEmpty(user.getPassword())){
map.put("msg","用户或密码为空!");
return map;
}
QueryWrapper
queryWrapper.eq("username",user.getUsername())
.eq("password",user.getPassword());
User user1=userService.getOne(queryWrapper);
if(user1!=null){
map.put("cod",1);
map.put("data",user1);
session.setAttribute("username",user1.getUsername());
}else {
map.put("msg","用户名或密码错误!");
}
return map;
}
}
当我们未登录时我们不能进入拦截的页面
登录
登录之后我们就能进入hello方法了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~