[英]Dropwizard View authentication by example
我熟悉在Dropwizard中實現BasicAuth
安全性,但僅適用於RESTful端點/資源。
我現在正在對Dropwizard Views進行試驗,以查看是否可以將它同時用作Web和REST服務器。 該Web應用程序將具有真正構成應用程序的“公共”頁面(實際上只是靜態HTML文件;“關於我們”,“聯系我們”等)以及“私人”(動態)頁面。 要進入這些頁面,必須對用戶進行身份驗證(登錄)。
因此,這意味着我需要兩種不同的DW身份驗證機制:
理想情況下,我希望Apache Shiro可以為我的系統處理所有身份驗證(REST和Web均如此),並且我看到了Dropwizard-Shiro lib,但這似乎僅對REST端點進行身份驗證。
我的網絡登錄系統需要像這樣工作:
environment
注冊)可以攔截該請求,並可以告知(也許是cookie / session var?)該用戶是否已通過身份驗證。 我主要關心的是:* 我應該為servlet檢查的cookie / session var實現什么? ; 和* 如何將我的auth控制器(即處理登錄頁面和目標URL之間的重定向的資源)與Shiro集成在一起? 是否可以通過該Dropwizard-Shiro庫執行此操作?
自定義Servlet過濾器(在environment
注冊):
public class AuthFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext responseContext) {
Cookie[] cookies = requestContext.getCookies();
boolean authenticated = false;
for(Cookie cookie : cookies) {
// 1. This is my first concern. What is better/more secure
// than what I'm doing here?
if("my_app_auth_cookie".equals(cookie.getName())) {
authenticated = true;
}
}
if(authenticated == false) {
responseContext.sendDirect("/auth/login");
}
}
}
如果未通過身份驗證,則將它們重定向到/auth/login
,它會命中AuthController
(同樣,已在environment
注冊為資源):
@Path("/auth")
@Produces(MediaType.TEXT_HTML)
public class AuthController {
@GET
@Path("/login")
public LoginPageView login() {
// Render some "login.ftl" template as HTML.
}
@POST
@Path("/authenticate")
public ??? authenticate(??? username, ??? password) {
// 2. Somehow send 'username' and 'password' to Shiro...
MyAppUser user = myAppRealm.authenticate(username, password);
// Now what do I do with 'user'?
}
}
當用戶在登錄頁面上提交表單(可能是POST到/auth/authenticate
)時,我們會以某種方式將輸入的憑據交給Shiro(再次,我想使用該Dropwizard-Shiro lib,因為我也很可能會將其用於我的REST端點)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.