基于springboot的WEB应用登录的常用接口总结

WEB应用的后台门户都有登录入口。做过几次登录的功能。就第一次会感觉难。难再功能菜单的级联查询组装,网上查一查。自己debug试试,最后搞定了.然后就把代码小心保存,以后就copy copy copy。哈哈!今天对springboot开发web应用做一些总结,只说说web登录这一块,以后慢慢记录一下sprinboot+springcloud的内容,从去年10月到现在。小半年时间基本也算对springboot+springcloud的微服务有一些应用上的体会。

一:登录用到的几个接口和方法:

HandlerInterceptor这个接口是代理拦截器。作用就是拒绝非法访问,
如果一个用户没有通过登录验证就拒绝访问系统,将其跳转到登录页面。所以一般定义一个拦截器实现这个接口:
@Slf4j
public class LoginHandlerInterceptor implements HandlerInterceptor {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {

    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Object obj = request.getSession().getAttribute("user");
        if(obj == null){
            response.sendRedirect("/toLogin");
            return false;
        }
        return true;
    }

}

判断当前用户是否session为空。

二:

WebMvcConfigurerAdapter这是个web配置类。我们集成此类实现自己的方法逻辑,有几个常用的方法:

(1):

addViewControllers方法:这个方法是添加页面过滤跳转的,一般情况,你要通过controller调用一个方法,没有任何逻辑跳转到,

你的另一个初始化页面,再controller里面要写至少三行代码,这里只要一行:加粗斜着的一行,可以无限添加

public void addViewControllers(ViewControllerRegistry viewControllerRegistry) {
    viewControllerRegistry.addViewController("/").setViewName("/login");
    viewControllerRegistry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    super.addViewControllers(viewControllerRegistry);
}
(2):
addInterceptors方法:这个方法是针对某些方法,特殊处理,跳过拦截器可以直接访问。如果登录、登出、去登录外部接口调用等

如果不加这个方法,外部请求会被上面的拦截器统一拦截返回302,也就是被拦截。代码如下:

@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry) {
    interceptorRegistry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
            .excludePathPatterns(ManageContent.TO_LOGIN_URL,ManageContent.LOGIN_URL,ManageContent.LOGIN_OUT);
    super.addInterceptors(interceptorRegistry);
}
(3):
addResourceHandlersfangfa :这个方法是处理静态资源的。一般情况不用重写该方法。
但是如果你对额资源文件没有放在默认的路径下面:classpatgh:resources下面的话,sprinboot是找不到你的资源文件的。

这个时候你需要自己重写改方法:

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //需要告知系统,这是要被当成静态文件的!
    //第一个方法设置访问路径前缀,第二个方法设置资源路径
    registry.addResourceHandler("/**").addResourceLocations("classpath:/mydefine/");
    super.addResourceHandlers(registry);
} @EnableWebMvc注解会使springboot原有的配置失效。
如果有用到前端的模板引擎的话,需要初始化模板引擎的一些参数,一般有freemarker,themleaf等。、

@Slf4j
public class FreeMarkerViewInterceptor extends FreeMarkerView {

   @Override
   protected void exposeHelpers(Map<String, Object> model, HttpServletRequest request) throws Exception {
      String scheme = request.getScheme();
      String serverName = request.getServerName();
      int port = request.getServerPort();
      String path = request.getContextPath();
//    String fullbase = scheme + "://" + serverName + ":" + port + path;
//    model.put("fullbase", fullbase);
      model.put("base", request.getContextPath());
      super.exposeHelpers(model, request);
   }
}

@Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setSuffix(".ftl");
    resolver.setContentType("text/html; charset=UTF-8");
    resolver.setExposeRequestAttributes(false);
    resolver.setExposeSessionAttributes(false);
    resolver.setExposeSpringMacroHelpers(true);
    resolver.setOrder(0);
    resolver.setRequestContextAttribute("request");
    resolver.setViewClass(FreeMarkerViewInterceptor.class);
    resolver.setCache(false);
    log.info("初始化 freeMarkerViewResolver ");
    return resolver;
}
、、这些参数应该也可以配置在yml文件里面,但是我没有试过

差不多就这些,可能还会有其他一些登录的特殊处理逻辑,目前没有用到。

 
 

猜你喜欢

转载自blog.csdn.net/liyingying111111/article/details/80482525