ssm jsp跳转jsp_去掉Shiro默认login.jsp跳转
生活随笔
收集整理的這篇文章主要介紹了
ssm jsp跳转jsp_去掉Shiro默认login.jsp跳转
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
測試過程中,發(fā)現(xiàn)shiro在認(rèn)證不通過時(shí)會自動跳轉(zhuǎn)到login.jsp頁面,然后login.jsp界面找不到,會出現(xiàn)404的報(bào)錯(cuò),但是本項(xiàng)目是前后端分離的項(xiàng)目,不需要shiro幫我們跳轉(zhuǎn)啊!
還好shiro的權(quán)限驗(yàn)證是基于過濾器實(shí)現(xiàn)的
解決如下:
1 增加過濾器????LoginFilter
/** * shiro登錄過濾器 * 默認(rèn)情況下 如果shiro驗(yàn)證失敗 會進(jìn)入到login.jsp的路徑 但是目前不需要這么跳轉(zhuǎn) */public class LoginFilter extends UserFilter { /** * 這個(gè)方法用于處理未登錄時(shí)頁面重定向的邏輯 * 因此,只要進(jìn)入了這個(gè)方法,就意味著登錄失效了 * 我們只需要在這個(gè)方法里,給前端返回一個(gè)登錄失效的狀態(tài)碼即可 * @param request * @param response * @throws IOException */ @Override protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException { response.setContentType("application/json; charset=utf-8"); ObjectMapper mapper = new ObjectMapper(); // 自定義返回內(nèi)容 // 本處返回一個(gè)自己定義的ResultVo對象 response.getWriter().write(mapper.writeValueAsString(new ResultVo(AppCode.ERROR,"無權(quán)訪問", AppConstant.NO))); }}2 設(shè)置ShiroConfig中創(chuàng)建ShiroFilterFactoryBean的Bean
????需要說明一下ShiroFilterFactoryBean中Map中String的含義
- authc(authentication)攔截器表示需要身份認(rèn)證通過后才能訪問
- anon(anonymous)攔截器表示匿名訪問(即不需要登錄即可訪問)
- [urls] 部分的配置,其格式是:“url=攔截器[參數(shù)],攔截器[參數(shù)]”;
代碼如下 :
//Filter工廠,設(shè)置對應(yīng)的過濾條件和跳轉(zhuǎn)條件@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); //過濾器 Map filters = shiroFilterFactoryBean.getFilters(); filters.put("authc", new LoginFilter()); //權(quán)限 Mapmap = new HashMap<>(); //放開一部分權(quán)限 //文檔的權(quán)限 map.put("/doc.html","anon"); map.put("/swagger-resources/**", "anon"); map.put("/webjars/**", "anon"); map.put("/v2/api-docs", "anon"); map.put("/swagger-ui.html", "anon"); //登錄/注銷的權(quán)限 map.put("/employee/login", "anon"); map.put("/employee/logout", "anon"); //登出 // map.put("/logout", "logout"); //對所有用戶認(rèn)證 map.put("/**", "authc"); //登錄 //shiroFilterFactoryBean.setLoginUrl("/login"); //首頁 //shiroFilterFactoryBean.setSuccessUrl("/index"); //錯(cuò)誤頁面,認(rèn)證不通過跳轉(zhuǎn) //shiroFilterFactoryBean.setUnauthorizedUrl("/error"); shiroFilterFactoryBean.setFilterChainDefinitionMap(map); return shiroFilterFactoryBean;} 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的ssm jsp跳转jsp_去掉Shiro默认login.jsp跳转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis重启会清除数据吗_从零开始手写
- 下一篇: rancher2.0安装mysql_高可