日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>

發(fā)布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向> 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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ù)

@Configuration public class ParameterConfiguration {@Bean(name = "urlPath")public urlPathBean urlPath(){return new urlPathBean("test"); //urlPath作為全局參數(shù)}} @AllArgsConstructor //這里使用lombok添加構(gòu)造方法和set,get方法 @NoArgsConstructor @Data public class urlPathBean {public String urlPath; }

二、自定義filter
因為Filter初始化在注入Bean之前,所以我們不能使用@AutoWired這種方式進行注入。
這里我們需要一個自定義的SpringUtils類負責(zé)從Spring容器中取得Bean;

/*** @author yqb* @date 2018年9月29日* @version 1.0*/ @Component public class SpringUtils implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {if (SpringUtils.applicationContext == null) {SpringUtils.applicationContext = applicationContext;}}public static ApplicationContext getApplicationContext() {return applicationContext;}//根據(jù)namepublic static Object getBean(String name) {return getApplicationContext().getBean(name);}//根據(jù)類型public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}}

自定義過濾器

@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中即可。

http.addFilterBefore(new addBean(), WebAsyncManagerIntegrationFilter.class);

如下圖,我們可以在Springboot的運行日志中看到,我們已經(jīng)成功將addBean這個過濾器加入到了Spring security過濾器鏈的最前端。

四、Controller實現(xiàn)界面跳轉(zhuǎn)
我這里設(shè)置的登陸成功后,都會跳轉(zhuǎn)到transfer這個路徑下。我們只需要在Controller中取得urlPath這個Bean中存放的原url路徑,將頁面引導(dǎo)至對應(yīng)的界面即可。

@RequestMapping("/transfer")public String welcom() {System.out.println("這里是controller:"+urlPath.getUrlPath());String temp = urlPath.getUrlPath();return temp;}

總結(jié)
在Spring security過濾器鏈中新增一個自定義過濾器,記錄登陸前界面的url并存儲到Bean中,當?shù)顷懗晒r,通過Controller將頁面重定向到Bean中記錄的原界面。

總結(jié)

以上是生活随笔為你收集整理的Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。