私は支柱と春のセキュリティに不慣れです。誰かが私がさまざまな役割を持つさまざまなユーザーのさまざまなURLにリダイレクトする方法を理解するのを手伝ってもらえますか?言い換えると、アクションコントローラーを使用してstruts2のユーザーロールに基づいてターゲットURLを決定する方法を教えてください。
次の質問で、Spring Security 3.1のロールに基づいてターゲットURLを決定しましたが、アクションの構成方法がわかりません。
次の設定を試しましたが、機能しません。
security.xml
<form-login login-page="/login" authentication-failure-url="/login?error=true" login-processing-url="/j_security_check" default-target-url="/default"/>
struts.xml
<action name="default" class="com.moblab.webapp.action.RoleRedirectAction" method="defaultAfterLogin"/>
RoleRedirectAction.java
package com.moblab.webapp.action;
import javax.servlet.http.HttpServletRequest;
public class RoleRedirectAction extends BaseAction{
public String defaultAfterLogin(HttpServletRequest request) {
if (request.isUserInRole("ROLE_ADMIN")) {
return "redirect:/<url>";
}
return "redirect:/<url>";
}
}
どうもありがとう。
編集1 私も次の注釈を試しました
@Action(value="/default",results={@Result(name="success",location="/querySessions")})
編集2 私の最終的な解決策は次のようになります。それが最善のアプローチかどうかはわかりませんが、機能します。
public class StartPageRouter extends SimpleUrlAuthenticationSuccessHandler {
@Autowired
private UserService userService;
protected final Logger logger = Logger.getLogger(this.getClass());
private RequestCache requestCache = new HttpSessionRequestCache();
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
//default path for ROLE_USER
String redirectPath = <url>;
if (authorities != null && !authorities.isEmpty()) {
Set<String> roles = getUserRoles(authorities);
if (roles.contains("ROLE_ADMIN"))
redirectPath = <url>;
else if (roles.contains("ROLE_INSTRUCTOR"))
redirectPath = <url>;
}
getRedirectStrategy().sendRedirect(request, response, redirectPath);
}
public void setRequestCache(RequestCache requestCache) {
this.requestCache = requestCache;
}
private Set<String> getUserRoles(Collection<? extends GrantedAuthority> authorities) {
Set<String> userRoles = new HashSet<String>();
for (GrantedAuthority authority : authorities) {
userRoles.add(authority.getAuthority());
}
return userRoles;
}
}
編集3 ここにはさらに良い解決策があります:
http://oajamfibia.wordpress.com/2011/07/07/role-based-login-redirect/#comment-12