我目前正在嘗試爲我的spring web應用程序實現登錄機制,而且我對於在春季使用的安全概念有點困惑。春季安全會議。保持登錄狀態
如果我訪問需要登錄的頁面,它正確地重定向到登錄頁面。登錄後,實際的頁面是可見的(到目前爲止是好的)。
代碼這個
<security:http use-expressions="true" auto-config="true">
<security:intercept-url pattern="/login" access="permitAll" />
<security:intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<security:form-login login-page="/login" default-target-url="/welcome"
authentication-failure-url="/loginfailed" />
<security:logout logout-success-url="/logout" />
<security:remember-me/>
</security:http>
但是,如果我再次訪問同一頁面,我需要重新登錄。所以我需要某種安全會話。我已經嘗試了很多關於記憶和會話管理的內容,但無法找到如何去做。
有人可以給我一些方向,在春季文檔或關鍵字適當的章節?
登錄表單
<form name='f' action="<c:url value='j_spring_security_check' />"
method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='j_username' value=''>
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='j_password' />
</td>
</tr>
<tr>
<td colspan='2'><input name="submit" type="submit"
value="submit" />
</td>
</tr>
<tr>
<td colspan='2'><input name="reset" type="reset" />
</td>
</tr>
</table>
</form>
LoginController.java
@RequestMapping(value="/login", method = RequestMethod.GET)
public String login(ModelMap model) {
return "login";
}
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
model.addAttribute("error", "true");
return "login";
}
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logout(ModelMap model) {
return "login";
}
嗨Nim, 如果用戶在(很長一段時間)之後返回到網頁,那麼用戶是否記得我?我需要的是,用戶只需一次認證,然後就可以使用網絡應用程序(逐屏顯示)。這是否一樣?如果是這樣,我真的需要一個持久性表嗎?難道不能在服務器緩存中保留登錄用戶數據嗎? –
@GreenLomu yes記得我是在會話結束時。 Spring會自動將登錄的主體放入會話中... – NimChimpsky
以及如何檢查用戶是否已經過身份驗證並擁有有效會話?它在中有所涉及? –