2010-07-14 6 views
2

Est-il possible de restreindre l'accès à certaines URL dans Struts 2? Je l'ai déjà si vous ne pouvez pas accéder directement à JSP, mais vous pouvez y accéder indirectement. Par exemple si j'ai un jsp "blah.jsp" je peux y accéder en tapant "/ blah" et si je n'ai pas une action appelée Blah.java, elle ira automatiquement au résultat, blah.jsp. La plupart du temps c'est ce que je veux, mais il y aura des jsps auxquels je ne veux pas accéder de cette façon, comme "blah-success.jsp". Y at-il un moyen de dire cela, je ne peux pas naviguer vers n'importe quelle URL qui ressemble à "/ -success"?Restreindre l'accès aux URL dans Struts 2

Edit: Je presque fonctionner ...

<constant name="struts.enable.SlashesInActionNames" value="true"/> 

<package name="my-secure-url" extends="my-secure" namespace="/secure**"> 
    <action name="*"> 
     <interceptor-ref name="secureStack"/> 
     <result>{1}</result> 
    </action> 
</package> 

Cela fonctionne si j'essaie de visiter «/sécurité/tout/rien/etc » et je ne suis pas loggué, je me dirigeais à la page de connexion. Toutefois, si je viens de vérifier et je suis à « http://localhost:8080/Struts2NewChapter8/secure/admin-portfolio » et je clique sur un lien vers « http://localhost:8080/Struts2NewChapter8/secure/update/update-account-form » Je reçois des erreurs qui ressemblent à ceci:

WARNING: Error setting expression '0' with value '/secure/update' 
    ognl.InappropriateExpressionException: Inappropriate OGNL expression: 0 
at ognl.SimpleNode.setValueBody(SimpleNode.java:312) 
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220) 
at ognl.SimpleNode.setValue(SimpleNode.java:301) 
at ognl.Ognl.setValue(Ognl.java:737) 
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198) 
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161) 
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149) 
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:155) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at interceptors.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:92) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) 
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
at java.lang.Thread.run(Unknown Source) 

Répondre

0

Mais bien sûr. Struts correspond à wildcard mappings dans l'ordre où ils apparaissent dans votre fichier de configuration, de sorte que le dernier qui correspond à une requête sera celui utilisé (c'est-à-dire que des correspondances moins spécifiques doivent être effectuées avant des correspondances plus spécifiques).

Quelque chose comme ça devrait faire l'affaire:

<action name="*"> 
    <result>/WEB-INF/jsp/{1}.ftl</result> 
</action> 

<action name="*-success"> 
    <result>/WEB-INF/jsp/access-denied.jsp</result> 
</action> 

Ce qui précède gardera votre comportement actuel et causer un fichier avec un suffixe -success au nom pour aboutir à un accès denied.jsp.

Edit: Vous devez activer cette propriété d'avoir des barres obliques dans vos noms d'action:

<constant name="struts.enable.SlashesInActionNames" value="true"/> 

Pour le rendre conditionnel, j'utiliser une pile d'intercepteurs vérifier si un utilisateur a été connecté avant de transmettre à la .jsp:

<action name="secure/*"> 
    <interceptor-ref name="authenticationStack"/> 
    <result>/WEB-INF/jsp/{1}.jsp</result> 
</action> 

dans votre authenticationStack vous auriez besoin d'un intercepteur qui détermine si un utilisateur est connecté Si vous ne les transmettre à une page de type accès denied.jsp à l'intérieur du interc. eptor. Le Struts docs on Interceptors devrait vous aider.

+0

C'est génial. Merci! J'essaie de faire quelque chose d'un peu similaire maintenant. Maintenant, l'URL que je veux attraper est quelque chose dans la zone "/ secure /". Donc, mon nom d'action est "*/secure/*" mais cela ne fonctionne pas. De plus, y a-t-il un moyen de le rendre conditionnel? Je veux seulement attraper ceci si un utilisateur n'est pas identifié. – JPC

+0

J'ai essayé vos mises à jour mais elles n'ont pas fonctionné. J'avais l'intercepteur déjà en place, c'est la partie struts.xml qui ne fonctionne pas. L'intercepteur n'est jamais appelé. J'ai inclus la constante, et la partie action. – JPC

+0

vérifiez mes modifications – JPC