论坛首页 Java企业应用论坛

Struts2 与 spring security整合时产生NullPointerException

浏览 3286 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-23   最后修改:2011-09-23
spring security验证用户信息成功后,我把目标地址指向了struts2的一个Action,
但Action却获取不到页面中的值了,报空指针异常。

<form-login login-page="/login.jsp"
    login-processing-url="/j_spring_security_check"
    default-target-url="/login!login.action"
    authentication-failure-url="/login.jsp?login_error=1"
    always-use-default-target="true"
/>

请各位朋友指正。


附login!login.action实现类

public class LoginAction extends BaseAction implements UserDetailsService {

private String j_username;  //get set
private String j_password;  //get set
private User tempUser;      //get set

@Autowired
private UserInfoBiz userInfoBiz;

public String login() {

try {
UserInfo user = null;
//j_username为null
String tempUsername = tempUser.getUsername();  //空指针异常,tempUser已在loadUserByUsername赋值

} catch(Exception e) {
e.printStackTrace();
}
return null;
}


public UserDetails loadUserByUsername(String arg0)
throws UsernameNotFoundException, DataAccessException {

    org.springframework.security.userdetails.User userDetail;   //成功赋值
tempUser = userDetail;

return userDetail;
}
}
   发表时间:2011-09-23  
看看是不是spring的安全认证框架的拦截顺序,你的这个对象是在之前还是在之后赋值的
0 请登录后投票
   发表时间:2011-09-23  
你这种做法是错误的~经国Spring security 验证后,它redirect到另一个页面的,所以不能传参的。当然也不可能接收到参数。正确的做法是
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
userDetails.getUsername();
里边有这些属性的。另外说下啊。。用户所有的信息都是存在Authentication里的。你可以看看
0 请登录后投票
   发表时间:2011-12-05  
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
userDetails.getUsername();

我就是用楼上的方法,但是得不到,是空指针,我查看了一下,SecurityContextHolder.getContext()得到的对象中authentiaction是空,我需要在什么地方把用户信息放到SecurityContextHolder呢,而我在AccessDecisionManager接口实现类中SecurityContextHolder.getContext().setAuthentication(authentication);貌似没起效果
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics