簡體   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