javascript
Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>
Spring security ---登陸成功后返回登陸前界面<頁面重定向>
問題:在登陸/退出成功后,我們往往通過http.formLogin().successForwardUrl()和http.logout().logoutSuccessUrl()設(shè)定操作成功后的回跳頁面。我們現(xiàn)在希望在任意界面跳轉(zhuǎn)到登陸界面后,一旦登錄成功便會返回登陸前的界面。
解決方法:我們自定義一個過濾器,在Spring security將當前頁面(假設(shè)為P)重定向到登錄頁面之前,先將當前頁面P的url存入對應(yīng)的Bean中,在登陸完成后,再通過controller直接重定向到原頁面P。
一、自定義全局參數(shù)
二、自定義filter
因為Filter初始化在注入Bean之前,所以我們不能使用@AutoWired這種方式進行注入。
這里我們需要一個自定義的SpringUtils類負責(zé)從Spring容器中取得Bean;
自定義過濾器
@WebFilter(urlPatterns = "/*",filterName = "channelFilter") public class addBean implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest httprequest = (HttpServletRequest) request;HttpServletResponse httpresponse= (HttpServletResponse) response;if(httprequest.getRequestURL().equals("你的待攔截URL")) { urlPathBean urlPath = (urlPathBean) SpringUtils.getBean("urlPath");System.out.println("這里是過濾器"+httprequest.getRequestURL());urlPath.setUrlPath(httprequest.getRequestURL()); //urlPath存入跳轉(zhuǎn)前的原頁面}chain.doFilter(request,response); //繼續(xù)運行Spring security其他的過濾器} }需要給Springboot的入口函數(shù)添加注解:
@ServletComponentScan //掃描servlet注解,比如@webfilter @WebListener 建filter和listener注入servlet容器中
三、將過濾器加入到Spring security的過濾器鏈中
我們只需要將我們的過濾器加入到過濾器鏈的最前端,讓我們的過濾器在頁面跳轉(zhuǎn)到登陸頁面之前,優(yōu)先記錄下跳轉(zhuǎn)前界面并存入urlPath這個Bean中即可。
如下圖,我們可以在Springboot的運行日志中看到,我們已經(jīng)成功將addBean這個過濾器加入到了Spring security過濾器鏈的最前端。
四、Controller實現(xiàn)界面跳轉(zhuǎn)
我這里設(shè)置的登陸成功后,都會跳轉(zhuǎn)到transfer這個路徑下。我們只需要在Controller中取得urlPath這個Bean中存放的原url路徑,將頁面引導(dǎo)至對應(yīng)的界面即可。
總結(jié)
在Spring security過濾器鏈中新增一個自定義過濾器,記錄登陸前界面的url并存儲到Bean中,當?shù)顷懗晒r,通過Controller將頁面重定向到Bean中記錄的原界面。
總結(jié)
以上是生活随笔為你收集整理的Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监测ASP.NET MVC 网站
- 下一篇: gradle idea java ssm