2011-01-27 18 views
3

私はspring_tiles Webアプリケーションを持っているし、今そこに春のセキュリティを追加しようとしている:Spring + Springセキュリティ+タイル。タイルページ定義でフォームログインを設定するには?

私TilesConfig.xmlの平和であること:

<definition name="loginPage" extends="commonPage"> 
    <put-attribute name="body" value="/WEB-INF/tiles/jsp/login_body.jsp" /> 
</definition> 

ここに私の春マッピング部が来る:

<bean id="urlMapping" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="interceptors"> 
    <list> 
    <ref bean="openSessionInViewInterceptor" /> 
    </list> 
    </property> 
    <property name="mappings"> 
    <props> 
    <prop key="/main.htm">mainController</prop> 
    <prop key="/category.htm">viewCategoryController</prop> 
    <prop key="/good.htm">goodController</prop> 
    <prop key="/registration.htm">registrationController</prop> 
    <prop key="/login.htm">?</prop> 
    </props> 
    </property> 
</bean> 

ここにapplicationContext-security.xmlの一部があります。

<http auto-config='true'> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    <intercept-url pattern="/css/**" filters="none"/> 
    <intercept-url pattern="/js/**" filters="none"/> 
    <intercept-url pattern="/login.htm*" filters="none"/> 
    <form-login login-page="/login.htm" /> 
</http> 

しかし、マッピングにタイルページ定義をどのように設定すればよいのでしょうか。他のすべてのページで私はコントローラを使用しましたが、Spring Securityが代わりにそのためにloginControllerを使うべきではないと思います。

これは私の質問です:タイルのloginPageを/login.htmに春のセキュリティでどのようにマップするのですか?

答えて

0

私はそれを行う方法を見つけました。

<bean id="loginController" 
    class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
    <property name="viewName" value="loginPage" /> 
</bean> 

をマッピングに応じてそのを追加::春の設定では、私はこれを追加しました

<prop key="/login.htm">loginController</prop> 

タイルとセキュリティの構成は同じままでした。次のようにフォーム・ログインを構成、セキュリティのcontext.xmlで

@Controller 
@RequestMapping("/login") 
public class LoginController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String login(Locale locale, Model model) { 
     return "login"; 
    } 

    @RequestMapping(value = "/error", method = RequestMethod.GET) 
    public String loginWithError(Locale locale, Model model) { 
     model.addAttribute("error", true); 
     return "login"; 
    } 
} 

2

デフォルトでは、タイルを使用した春のセキュリティの設定には特別な設定はありません。

ログインページのタイルの名前は、私はあなたが春のセキュリティを使用している場合は、ログインページがPOSTのURLを持っているでしょう、あなたのapplicationContext-security.xml

<intercept-url pattern="/loginPage" filters="none"/> 
<form-login login-page="/loginPage" /> 

に次のようなものを持っている必要がありますね、loginPageある場合これは/j_spring_security_check(デフォルト)になります。これはloginControllerと同等です。

+0

私はそれを試みました - タイル表示を使用する代わりに、http:// localhost:8080/myapp/loginPageにリダイレクトします。しかし、私はそれを実現する方法を見つけた - 答えを見て...私はちょうど春についての知識が乏しい - それは問題だった:) – Ananda

1

別のオプションは、次のコントローラを持つことです

views.xmlで
<form-login login-page="/login" authentication-failure-url="/login/error" /> 

は、ログインビューを宣言します。

<definition name="login" extends="template"> 
    <put-attribute name="title" value="Nuevo Usuario"/> 
    <put-attribute name="body" value="/login.jsp"/> 
</definition> 

最後にlogin.jspにエラーがある場合に表示するには、次のコードを使用します。

<c:if test="${not empty error}"> 
    <font color="red"> Error al ingresar. <br /> Motivo : 
     ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 
    </font> 
</c:if> 
関連する問題