繁体   English   中英

如何在Spring中使用会话在不使用Spring Security的情况下设置用户配置文件

[英]How to set the userprofile using session in spring without using spring security

我只想知道如何在春季没有弹簧安全性的情况下使用会话设置用户配置文件。 并在此处更新了示例程序。

下面的控制器类有助于登录屏幕,它将重定向到结果/成功页面。 在这里,我尝试从数据库中获取故事字段,它成功打印在控制台上,但未出现在成功屏幕上

@Controller
@SessionAttributes("person")
public class LoginController{

    @Autowired
    public PersonDAO personDAO;     

    public void setPersonDAO(PersonDAOImpl personDAO) {
        this.personDAO = personDAO;
    } 

新的登录页面:

 @RequestMapping(value="/login",method=RequestMethod.GET)  
        public ModelAndView welcome(HttpServletRequest request)
        {
            ModelAndView model = new ModelAndView("login");
            Person person = new Person();
            model.addObject("PersonAttribute", person);

        return model ;
        }

使用PersonDAOimpl的select方法检索数据以从数据库检索数据

    @RequestMapping(value="/loggedin",method=RequestMethod.POST)
        public ModelAndView login(HttpServletRequest request,@ModelAttribute("PersonAttribute") Person person,HttpSession session)
        {


            ModelAndView modelAndView = new ModelAndView("success");
            modelAndView.addObject("person",person);
            person=personDAO.select(person);
            System.out.println(person.getStory());
             session=request.getSession(true);
            session.setAttribute("person",person);
            modelAndView.setViewName("success");


            return modelAndView;
        }

PersonDAOIMPL类具有用于检查用户名和密码的select方法,它将提供数据。

    public class PersonDAOImpl implements PersonDAO{

        private SessionFactory sessionFactory;

        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
         public Person select(Person p)
        {
            Session session = this.sessionFactory.openSession();
            Query query=session.createQuery("from Person where username =:username and password = :password");
            query.setString("username", p.getUsername());
            query.setString("password", p.getPassword());

            p =(Person)query.uniqueResult();
            System.out.println(p.getStory());
            System.out.println(p.getPassword());
            //p= (Per)queryResult;
            //session.getTransaction().commit();
            return p;
        }



    @Entity
    @Table(name="user_employee")
    public class Person {

        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        @Id
        @Column(name="id")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private int id;
        @Column(name="username")
        private String username;
        @Column(name="password")
        private String password;
        @Column(name="story")
        private String Story;


        public String getStory() {
            return Story;
        }
        public void setStory(String story) {
            Story = story;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }

    }

登录jsp页面:用户名和密码是下一页的输入

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>login</title>
</head>
<body>
<form:form id="loginForm" method="post" action="loggedin.html" modelAttribute="PersonAttribute">

<form:label path="username">userName</form:label>
<form:input name="username" path="username" /><br>
<form:label path="password">password</form:label>
<form:password path="" name="password"/>
<input type="submit" value="login"/>
</form:form>
</body>
</html>

成功的jsp页面:重定向输出

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
    <center>Welcome ${person.username}</center>
    <form:input name="username"value="${person.password}" /><br>
    <input type="text" value="${person.username}" disabled="true"/>
    <center>Your password is  ${person.password}</center>
    <input type="text" value="${person.password}" />
    <input type="text" value="${person.story}" />
</body>
</html>

您的问题还不清楚! 但是我发现您的代码中有些奇怪的东西,可能会导致在jsp中显示用户时出现某种问题:

你有

@RequestMapping(value="/loggedin",method=RequestMethod.POST)
public ModelAndView login(HttpServletRequest request,
             @ModelAttribute("PersonAttribute") Person person,
             HttpSession session) {

    ModelAndView modelAndView = new ModelAndView("success");
    modelAndView.addObject("person", person);
    person=personDAO.select(person);
    System.out.println(person.getStory());
     session=request.getSession(true);
    session.setAttribute("person",person);
    modelAndView.setViewName("success");

    return modelAndView;
}

奇怪的是,在从DAO加载person对象之前,先将其添加到模型中! 因此,您的模型具有请求中的person对象,但没有从数据库中加载的对象。

我实现控制器的方式如下所示:

@RequestMapping(value="/loggedin",method=RequestMethod.POST)
public ModelAndView login(HttpServletRequest request,
             @ModelAttribute("PersonAttribute") Person person,
             HttpSession session) {

    Person loadedPerson=personDAO.select(person);

    ModelAndView modelAndView = new ModelAndView("success");
    modelAndView.addObject("person", loadedPerson);
    //System.out.println(person.getStory());       
    request.getSession(true).setAttribute("person", loadedPerson);

    return modelAndView;
}

顺便说一句:我也将重构您的DAO方法,以明确这两个p变量是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM