`

使用struts2 redirect跳转不同命名空间方法

阅读更多

springsecurity教程

http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html

http://lebuqi.com/forum.php?mod=viewthread&tid=22

http://code.google.com/p/family168/

 

 

在使用struts2 redirect跳转不同命名空间方法时:

环境:

@Results( {

                   @Result(name = CrudActionSupport.RELOAD, location = "account.action", type = "redirect"),

                   @Result(name = "main", location = "/fs/file-system.action", type = "redirect") })

public class AccountAction extends CrudActionSupport<User> {

         public String save() throws Exception {

                   return "main";

}

}

注意:使用上面方法需要在struts.xml中配置如下,主要是

<constant name="struts.convention.default.parent.package" value="crud-default" />

<package name="crud-default" extends="json-default">

<interceptors>

                   <interceptor-stack name="crudStack">

                            <interceptor-ref name="store">

                                     <param name="operationMode">AUTOMATIC</param>

                            </interceptor-ref>

<!-- 基于paramsPrepareParamsStack,增加store interceptor保证actionMessageredirect后不会丢失 -->

                            <interceptor-ref name="paramsPrepareParamsStack" />

                   </interceptor-stack>

         </interceptors>

<default-interceptor-ref name="crudStack" />

</package>

 

java.lang.IllegalStateException

         at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)

原因:我在客户端使用的是ajax提交,不知道为什么不能跳转,如果不用ajax,则该跳转没有问题

 

别人建议在方法上配置:

@Action(results={@Result(name="main",location = "/fs/file-system.action",type="redirect",params={"id","${id}","action","${action}","type","${type}"})})

 

 

关于使用struts2自带json问题:

@Action(results = { @Result(type = "json", name = "get", params = {"wrapPrefix", "[" }) })

         public String get() throws Exception {

                   return GET;

         }

 

如何解决用户注册后自动登录的问题:

首先,因为客户端登录的时候密码是由客户端自己加密,所以在CustomAuthenticationProcessingFilter中验证时不需要加密。

其次,在application-Context.xml中,密码采用明文方式,即在springsecurity过滤时不需要再次加密密码

<s:authentication-provider user-service-ref="userDetailsService">

                   <s:password-encoder hash="plaintext" />

                   <!-- <s:password-encoder hash="sha" base64="false"/> -->

         </s:authentication-provider>

 

最后,当用户注册结束后,我们使用一个跳转把用户名、密码和验证码等都自动提交,从而实现用户自动登录。

submitHandler: function(form) {

                                               $('#password').val($.sha1($('#password').val()));

                                               $(form).ajaxSubmit({

                                                        success: function(msg) {

                                                                 window.location = "${ctx}/j_spring_security_check?j_username=" + $('#loginName').val() + "&j_password=" + $('#password').val() + "&j_captcha=" + $('#j_captcha').val();

                                                        },

                                                        error: function(msg) {

                                                        }

                                               });

                                               return false;

                                     }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics