我想使用Hibernate使用Spring MVC创建登录表单。
我发现我需要使用'session'来保存登录信息。
所以,我在'Controller.java','。jsp'中使用它。
但似乎没有用。
以下是我的代码。 Controller.java:
@Controller
public class PassengerController {
@Autowired
private PassengerService passengerService;
public void setPassengerService(PassengerService passengerService) {
this.passengerService = passengerService;
}
@RequestMapping(value = "/login")
public String login(HttpSession session, HttpServletRequest request) {
String id = request.getParameter("idInput");
String pw = request.getParameter("pwInput");
// check DB
// if it is right, add session.
session.setAttribute("id", id);
session.setAttribute("pw", pw);
return "flightschedule";
}
@RequestMapping(value = "/logout")
public String logout(HttpSession session) {
session.invalidate();
return "flightschedule";
}
}
以下是flightschedule.jsp的一部分:
<c:if test="${sessionScope.loginId eq null}">
<!-- Not login: show login button -->
<div class="loginArea">
<form action="${loginAction}"> <!-- // URL '/login' -->
<input type="text" name="idInput" placeholder="ID" class="loginInput">
<input type="password" name="pwInput" placeholder="PASSWORD" class="loginInput">
<input id="loginButton" type="submit" value="login">
</form>
</div>
</c:if>
<c:if test="${sessionScope.loginId ne null}">
<!-- already login: show logout button -->
<div class="loginArea">
<form action="${logoutAction}"> <!-- // URL '/logout' -->
<input type="button" name="idInput" id="loginInfo" value="Welcome ${sessionScope.loginId}">
<input id="logoutButton" type="submit" value="LOGOUT">
</form>
</div>
</c:if>
我打算当session.id存在时,显示注销按钮,当session.id不存在时,显示登录按钮。
我不想使用拦截器或弹簧安全等。
我认为他们对我的小项目太复杂了。
而且,我的所有页面都有登录/注销表单。我没有使用单独的页面登录。
所以我不想使用拦截器。我只是想检查一些jsp页面中是否存在会话密钥。根据它的存在,我想改变页面的视图。
上面的代码部分工作。登录时,会显示“Welcome userId”。
但是,当我点击页面的徽标(然后转到第一页)时,它仍会显示“登录”按钮。它必须显示'注销'按钮,因为session.loginId存在!
你有解决方案吗?
答案 0 :(得分:2)
在登录方法中输入
// check DB
// if it is right, add session.
session.setAttribute("id", id);
session.setAttribute("pw", pw);
但是在JSP检查sessionScope.loginId
上,看起来应该检查名为id
的属性。