如果會話存在,可以將@RequestMapping註釋設置爲僅允許查看頁面? (用戶已登錄。)僅當會話存在時彈出訪問頁面
0
A
回答
1
如果您不想使用spring-security出於某種原因,並希望讓您的自定義實現僅允許訪問會話存在,那麼您還可以編寫一個實現javax.servlet.Filter的RequestFilter,並檢查請求有一個有效的會話,然後允許它通過其他顯示一個錯誤頁面。這是一個例子。
public class RequestAuthenticationFilter implements Filter {
private static final Logger LOG = Logger.getLogger(RequestAuthenticationFilter.class);
protected static final List<String> ALLOWED_URL_LIST = Arrays.asList("/login.htm", "/400.htm", "/403.htm", "/404.htm", "/405.htm", "/500.htm", "/503.htm");
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse response, FilterChain filterChain) throws IOException,
ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(false);
String url = (request.getRequestURI());
if(ALLOWED_URL_LIST.contains(url) || url.endsWith(".css") || url.endsWith(".js") || url.endsWith(".png")
|| url.endsWith(".jpg") || url.endsWith(".jpeg") || url.endsWith(".ttf") || url.endsWith(".woff")
|| url.endsWith(".csv")) {
filterChain.doFilter(request, response);
}
else if((null == session) || session.getAttribute("user") == null
|| StringUtils.isEmpty(((User) session.getAttribute("user")).getUsername().trim())) {
((HttpServletResponse) response).sendRedirect("/login.htm");
}
else {
filterChain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
在這個例子中附加檢查,如果請求的是任何圖像,JS,CSS文件,那麼我們跳過會話確認。
一旦添加了過濾器實現,您將不得不接下來確保您想要驗證會話的所有請求都通過此過濾器。爲此,您必須爲此過濾器創建一個bean,然後在您的web.xml中引用該bean。
以下是您必須在web.xml中包含的內容。這裏的是用來爲過濾器創建bean的名稱。並且可以使用來決定要使用此過濾器檢查哪個網址用於會話檢查
<filter>
<filter-name>requestAuthenticationFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>requestAuthenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
1
您可以很容易地通過Spring-Security進行設置 - 例如。考慮從Spring安全網站一個例子:
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/signup", "/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/db/**").access("hasRole('ROLE_ADMIN') and hasRole('ROLE_DBA')")
.anyRequest().authenticated()
.and()
// ...
.formLogin();
}
這裏/resources
映射路徑是允許每個人(包括匿名用戶),其他一切需要用戶有一定的作用,或者至少在已經登錄
相關問題
- 1. 當彈出頁面彈出時OnAppearing不會在當前頁面上調用?
- 2. 在會話中存儲當前頁面
- 3. 在會話超時後在當前頁面上獲取會話
- 4. 課程中的會話爲空(根本沒有會話),但會話從aspx頁面訪問時確實存在
- 5. 使用會話變量訪問頁面
- 6. 在laravel5.2刪除會話時,CMS頁面訪問
- 7. 爲什麼在頁面上出現彈出窗口時發生會話輸出?
- 8. 解決:當PHP觸發頁面加載時保存會話,但當觸發Javascript時不會保存會話
- 9. Java會話超時彈出
- 10. 僅當證書安裝時才能訪問頁面
- 11. 僅當有效登錄時才訪問頁面
- 12. 在wordpress頁面彈出對話框?
- 13. Google Maps InfoWindow當我瀏覽回頁面時不會彈出頁面
- 14. 嘗試訪問會話bean時出錯
- 15. 當管理員註銷wordpress時,其他頁面無法訪問會話值
- 16. 僅在IE10打開頁面時,日期選取器會自動彈出
- 17. 當滾動頁面時隱藏jquery移動彈出頁面
- 18. onLoad彈出(僅在第一次訪問時加載)
- 19. 僅當會話不存在時才加載session_start()?
- 20. 當我訪問頁面時,Rails表格會自動提交
- 21. 彈出aspx頁會話過期
- 22. 404當訪問Codeigniter頁面
- 23. UIScrollView(分頁模式)僅在有兩頁或多頁時纔會彈出?
- 24. Atlassian Confluence:當訪問頁面時會顯示一個彈出窗口的宏類型插件
- 25. 如何在彈出的aspx頁面中訪問RTF字段?
- 26. 僅當來自特定頁面時,纔會顯示網頁
- 27. 訪問頁面時出現IE錯誤?
- 28. 當數據連接不存在時彈出對話框 - Android
- 29. CSS模式彈出會話存儲
- 30. PHP - 在其他頁面無法訪問會話