如题,使用什么样的方式实现登陆功能更好?
我现在使用session,但是有个问题就是,在每个controller的每个方法中,都需要把session取出来,获取登陆后保存的用户信息,然后添加到ModelAndView中。
重复代码很多,该如何解决?
请问大家该如何实现较好?
1.用springmvc的拦截器,获取用户信息。
2.建一个baseController,然后其他的controller继承这个类
可以写一个abstract类其里面有一个属性是protected的用户实体,在其构造方法中将session中的用户信息取出来保存在用户实体中,然后所有的controller继承该类就可以用在子类中用this直接使用,下面是伪代码:
[code="java"]
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public abstract class SuperAction extends ActionSupport {
private static final long serialVersionUID = 1L;
protected User user ;
protected SuperAction() {
user = (User)ServletActionContext.getRequest().getSession().getAttribute("user");
}
}
[/code]
这个不简单么
注入就行
比如说你要注入的是账号的Id 参数名字是accountId
在登录的controller中注入要保存的信息 注入到ModelMap 中
方法如下
在controller的最顶部加上@SessionAttributes({"accountId")
然后在登录方法里 把accountId 放到ModelMap 中
modelMap.put("accountId",xxx);
然后 如果你在某个业务controller中如果要用到accountId
只需要也在当前这个controller的类顶部也加上加上@SessionAttributes({"accountId")
然后在你的方法的参数上写上 @ModelAttribute("accountId") String accountId
那么这个accountId就取到值了
使用过滤器
增加个controller基类!
既然用spring mvc了,楼主为何不尝试下使用spring security呢。
:cry: :oops: :oops: :oops: :oops: :oops: :oops:
写个Tag就行了
在jsp中调用tag 输出用户名等
如下:
/session:user
session不是登录后request.getSession().setAttribute()之后,每次调用都从request.getSession()中取吗?为什么要每次都保存呢?我现在的项目中也是用的spring MVC,没有像楼主这样用session啊!
直接 用开源的apache shiro框架,java里面很多都有现成的解决方案,直接用就是
[url]http://www.kxikx.com/nosm/response!input.action?parentId=8ab20e8f413e711e01413e72a2b10002[/url]
建议使用安全框架来做权限管理,比较流行的是shiro和spring security。这样才能保证其安全性。
都放sessssion了,所有的页面都可以直接取到啊${session}