我是靠谱客的博主 坚强蜗牛,这篇文章主要介绍springboot + shiro 多realm多loginUrl设置(动态改变loginUrl),现在分享给大家,希望可以做个参考。

【springboot + shiro】多realm的多loginUrl设置(动态改变loginUrl)

在shiro多realm的情况下,让用户访问需要认证的页面时,不同的角色肯定需要不同的loginUrl
然而shiro的ShiroFilterFactoryBean只能写入一个loginUrl,此时需要用到ShiroFilterFactoryBean的setFilters方法,下面是解决办法。

  • shiro底层是通过redirectToLogin方法使未认证的用户跳转到登陆页的,那么只需要重写这个方法即可。博主的项目中,用户的loginUrl有“/usr/”和“/login关键字”,管理员的loginUrl同理,有“/admin/”和“/login“关键字,那么只需要区分这两个路径即可。通过HttpServletRequest获取请求URI,通过判断URI中的关键字,决定跳转到哪个loginUrl。那么第一步就是重写redirectToLogin方法:
public class MyAuthenticationFilter extends FormAuthenticationFilter {


    private static final String USR_LOGIN_URL = "/usr/page/login";
    private static final String ADMIN_LOGIN_URL = "/admin/page/login";



    @Override
    protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException{

        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        String url = httpServletRequest.getRequestURI();

        if(url.contains("/usr/"))
            WebUtils.issueRedirect(request, response, USR_LOGIN_URL);
        else if(url.contains("/admin/"))
            WebUtils.issueRedirect(request, response, ADMIN_LOGIN_URL);
    }



}
  • 第二步,在ShiroConfig中,将filter注入到shiro的ShiroFilterFactoryBean,代码如下:
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(
			@BeanSecurityManager SecurityManager securityManager) {
		ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
		
		//设置安全管理器
		factoryBean.setSecurityManager(securityManager);

		Map<String, String> filterMap = addAuthenticationUrl(new LinkedHashMap<>());

		Map<String, Filter> filters = factoryBean.getFilters();
		
		// 将重写的Filter注入到factoryBean的filter中
		filters.put("authc", new MyAuthenticationFilter());
		factoryBean.setFilters(filters);

		factoryBean.setFilterChainDefinitionMap(filterMap);
		factoryBean.setUnauthorizedUrl("/admin/power/unauthorized.action");

		return factoryBean;
	}

完工睡觉!!

最后

以上就是坚强蜗牛最近收集整理的关于springboot + shiro 多realm多loginUrl设置(动态改变loginUrl)的全部内容,更多相关springboot内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(112)

评论列表共有 0 条评论

立即
投稿
返回
顶部