文档章节

springboot整合shiro

lifes77
 lifes77
发布于 2017/12/01 09:59
字数 450
阅读 21
收藏 1

配置拦截器也很简单,Spring 为此提供了基础类WebMvcConfigurerAdapter ,我们只需要重写addInterceptors 方法添加注册拦截器。

实现自定义拦截器只需要3步: 

1、创建我们自己的拦截器类并实现 HandlerInterceptor 接口。

2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。

3、实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。

package com.sun.configuration;

        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.core.Ordered;
        import org.springframework.core.io.support.PropertiesLoaderUtils;
        import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
        import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
        import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

        import java.io.IOException;
        import java.util.Enumeration;
        import java.util.Properties;

/**
 * Created by sun on 2017-3-21.
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    /**
     * 此方法把该拦截器实例化成一个bean,否则在拦截器里无法注入其它bean
     * @return
     */
    @Bean
    SessionInterceptor sessionInterceptor() {
        return new SessionInterceptor();
    }
    /**
     * 配置拦截器
     * @param registry
     */
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sessionInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login","/permission/userInsert",
                        "/error","/tUser/insert","/gif/getGifCode");
    }

}
package com.sun.configuration;

import com.sun.permission.model.User;
import com.sun.permission.service.PermissionService;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by sun on 2017-4-9.
 */
public class SessionInterceptor implements HandlerInterceptor{
    private final Logger logger = Logger.getLogger(SessionInterceptor.class);
    @Resource
    private PermissionService permissionService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        logger.info("---preHandle---");
        System.out.println(request.getContextPath());
        Subject currentUser = SecurityUtils.getSubject();
        //判断用户是通过记住我功能自动登录,此时session失效
        if(!currentUser.isAuthenticated() && currentUser.isRemembered()){
            try {
                User user = permissionService.findByUserEmail(currentUser.getPrincipals().toString());
                //对密码进行加密后验证
                UsernamePasswordToken token = new UsernamePasswordToken(user.getEmail(), user.getPswd(),currentUser.isRemembered());
                //把当前用户放入session
                currentUser.login(token);
                Session session = currentUser.getSession();
                session.setAttribute("currentUser",user);
                //设置会话的过期时间--ms,默认是30分钟,设置负数表示永不过期
                session.setTimeout(-1000l);
            }catch (Exception e){
                //自动登录失败,跳转到登录页面
                response.sendRedirect(request.getContextPath()+"/login");
                return false;
            }
            if(!currentUser.isAuthenticated()){
                //自动登录失败,跳转到登录页面
                response.sendRedirect(request.getContextPath()+"/login");
                return false;
            }
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        logger.info("---postHandle---");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        logger.info("---afterCompletion---");
    }
}

© 著作权归作者所有

共有 人打赏支持
lifes77

lifes77

粉丝 40
博文 63
码字总数 23922
作品 0
黄冈
程序员
私信 提问
springboot权限、session管理

大家好现在springboot都用什么管理权限以及session共享啊? 是 springboot + shiro 这个能实现session共享吗?多服务器的 还是 springboot + springsecurity + spring session? 还有 spring...

樱木花道VS康
2018/06/28
648
1
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
7.3K
17
SpringBootBucket 2.0.4 发布,代号“傲娇的小二晶”

SpringBootBucket 自从1.0.0版本发布后就有好多人喜欢,目前码云上面star数量接近1.2k。上个月还收到了红薯签名的1000 star奖杯,这个我自己也觉得很惊讶。 由于SpringBoot 1.x官方将终止维护...

一刀
2018/09/16
1K
4
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
0
1
springboot + shiro 权限注解、请求乱码解决、统一异常处理

springboot + shiro 权限注解、请求乱码解决、统一异常处理 前篇 后台权限管理系统 相关: spring boot + mybatis + layui + shiro后台权限管理系统 springboot + shiro之登录人数限制、登录...

wyait
2018/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

当心Python函数可变默认参数(list,set,dict…)的陷阱

绝大多数情况下,Python是一个干净具有一致性的语言。然而,有些少数情况会让初学者感到困惑。其中有些情况是有意识的但会成为潜在的莫名其妙,而有些可以说是语言赘肉。下面我们看看使用可变...

呆木木人儿
1分钟前
0
0
Centos7安装Docker镜像仓库Harbor1.5.3

Harbor 详细介绍 Harbor安装指南 Harbor官网配置CA认证 Kubernetes Harbor安装教程 1、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是...

谢思华
8分钟前
1
0
mysql保存23:59:59时,自动加一秒

今天遇到一个问题,发现mysql保存2018-08-22 23:59:59的时间时会自动加一秒,存到库中就变成了2018-08-23 00:00:00,经查阅资料发现是因为MySQL数据库对于毫秒大于500的数据进行进位,更...

xiaomin0322
8分钟前
0
0
Redis集群-哨兵机制

redis并没有提供自动master选举功能, 而是需要借助一个哨兵来进行监控 哨兵的作用就是监控Redis系统的运行状况, 它的功能包括两个 监控master和slave是否正常运行 master出现故障时自动将s...

Java搬砖工程师
12分钟前
0
0
我见很多赚大钱的人,但没有一个是靠努力成功的!(强烈推荐)

这些年,在我见过的能够赚大钱的人里,没有一个不是靠运气的。 这很残忍,但是事实。 因为在一个高速发展的时代里,一个人要想成功,”机遇“远比”能力“重要。 只有当社会稳定下来的时候,...

柴高八斗之父
15分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部