网站有后天,判断管理员是否登录,这样的代码是否安全
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain filter) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
String managerLoginName = (String) session.getAttribute("adminloginname");
if (managerLoginName != null) { // 如果已经登录
filter.doFilter(req, res); 
} else { // 如果没有登录
response.sendRedirect(Config.PRO + "login.xhtml"); // 跳转到登录页面
}
}//管理员登录成功后执行:req.getSession().setAttribute("adminloginname", user.getName()); <filter>
    <filter-name>AdminLoginFilter</filter-name>
     <filter-class>com.xxx.web.action.AdminLoginFilter</filter-class>
   </filter>
  <filter-mapping>
   <filter-name>AdminLoginFilter</filter-name>
     <url-pattern>/admin/*</url-pattern>
  </filter-mapping>

解决方案 »

  1.   

    随便说两句
    如果每次(String) session.getAttribute("adminloginname");取出来的属性值都是一定值,那么感觉就不太安全了,可能随机方式会更好些。
      

  2.   

    这要看你的这个软件用在什么场景了,还有你的这个软件的要求的安全程度,比如说是银行项目什么的,还有比如是在局域网或是外网上的。
    建议还是做安全控制会比较好,比如你那个session里面可以存如一些随机数,还有就是可以使用rsa来加密,保证在前台传到后台的时候中间网络传输过程中是加密的。
      

  3.   

    查用MD5加密
    如何你要使用session的话,传入两个值,一个是adminloginname,一个是MD5(adminloginname + key[长度大于16位]),服务器接收到 adminloginname 再次MD5 和传过来的MD5对比,若相同则登录管理员
      

  4.   

    用户登录成功 创建session,用户退出session置为空值并且对其销毁。
    所以以session是否为空来判断是否登录我觉得是可以的。查用MD5加密
    如何你要使用session的话,传入两个值,一个是adminloginname,一个是MD5(adminloginname + key[长度大于16位]),服务器接收到 adminloginname 再次MD5 和传过来的MD5对比,若相同则登录管理员这个接受到不明白怎么接收,我觉得整个过程都是在服务器端的。