我是靠谱客的博主 坚强蜗牛,最近开发中收集的这篇文章主要介绍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 + shiro 多realm多loginUrl设置(动态改变loginUrl)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部