spring boot 之session

1.登录之后跳转公告界面,没有登录的时候不能跳转

SpringBoot+thymeleaf,在html页面获取session

1.Controller层代码


 @RequestMapping("userLogin")
.     public String userLogin(@RequestParam("userName")String userName,@RequestParam("password")String password,HttpServletRequest request) {
         int n=userService.userLogin(userName, password);
         if(n==1) {
             HttpSession session=request.getSession();//获取session并将userName存入session对象
             session.setAttribute("userName", userName);
             return "user/index";
         }
        
        return "index";
     }


2.View层


<!DOCTYPE html>
 <html xmlns:th="http://www.thymeleaf.org">
 <head>
 <meta charset="UTF-8">
 <title>Insert title here</title>
 </head>
 <body>
 登陆成功
 <div th:text="${session.userName}"></div> <!--获取session中的userName -->
 </body>
 </html>
 

以上的方法并没有用到,计划使用的是页面js判断,若account不为空则不使其跳转
值得注意的是:

在thymeleaf框架中,在js代码中,去获取到session中的属性值。

一、内联js

<script th:inline="javascript">

//代码

</script>

二、


<script th:inline="javascript">

/*<![CDATA[*/

var xx=/*[[${session.xx}]]*/   --获取session中的值

var yy=/*[[${yy}]]*/      --获取model中的值

/*]]>*/

</script>
所以自己设计的代码是:
controller层:

@RequestMapping(value="/gg")
public String login_gg(HttpServletRequest request, HttpServletResponse response){
    System.out.println("================login_gg===================");
    System.out.println(account.getUsername());
    request.getSession().setAttribute("accountName", account.getUsername());
    return "gg";
}
HTML层:

<script th:inline="javascript">

          function toAccount(){
              var accountName = [[${session.accountName}]];
              if( accountName != null) {

                      layer.alert("已经成功登录", {
                          skin: 'layui-layer-lan'
                          , closeBtn: 0
                          , anim: 4 //动画类型
                      });
      }
          }

</script>
 

2.实现登录之后不能再进入“我的账户”界面
3.实现退出功能
技术点一:在layer中添加一个按钮,并且按钮绑定链接

layer.alert("已经成功登录用户"+accountName, {
    btn: ['退出登录','确认'],
    skin: 'layui-layer-lan'
    , closeBtn: 0
    , anim: 4 //动画类型
    ,success: function(layero){
        var btn = layero.find('.layui-layer-btn');
        btn.find('.layui-layer-btn0').attr({
            href: '/visit'
            ,target: '_blank'
        });
技术点二:在layer中按钮绑定一个事件,格式为btn.find('按钮id').click(function(){自定义事件代码});

btn.find('.layui-layer-btn0').click(function(){  var userAgent = navigator.userAgent;
    if (userAgent.indexOf("Firefox") != -1 || userAgent.indexOf("Chrome") !=-1) {
        window.location.href="about:blank";
        window.close();
    } else {
        window.opener = null;
        window.open("", "_self");
        window.close();
    }});
此页面绑定的是关闭当前页面的代码

if (userAgent.indexOf("Firefox") != -1 || userAgent.indexOf("Chrome") !=-1) {
    window.location.href="about:blank";
    window.close();
} else {
    window.opener = null;
    window.open("", "_self");
    window.close();
}

 

转载于:https://www.cnblogs.com/wf1647790534/p/9802329.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你关于 Spring Boot 自定义 Session 的问题。 在 Spring Boot Session 的默认实现是基于 Servlet 的 HttpSession 接口。如果你想要自定义 Session 实现,可以通过实现 Spring SessionSession 接口,并在配置文件指定该实现来实现。 下面是一个使用 Redis 存储的自定义 Session 实现的示例代码: 首先,创建一个 RedisSession 类,实现 Session 接口,并实现相应的方法,如下所示: ```java public class RedisSession implements Session { private final String id; private Map<String, Object> attributes = new HashMap<>(); private boolean isNew; public RedisSession(String id) { this.id = id; this.isNew = true; } @Override public String getId() { return this.id; } @Override public <T> T getAttribute(String name) { return (T) this.attributes.get(name); } @Override public void setAttribute(String name, Object value) { this.attributes.put(name, value); this.isNew = false; } @Override public void removeAttribute(String name) { this.attributes.remove(name); } @Override public Instant getCreationTime() { throw new UnsupportedOperationException(); } @Override public void setLastAccessedTime(Instant lastAccessedTime) { throw new UnsupportedOperationException(); } @Override public Instant getLastAccessedTime() { throw new UnsupportedOperationException(); } @Override public void setMaxInactiveInterval(Duration interval) { throw new UnsupportedOperationException(); } @Override public Duration getMaxInactiveInterval() { throw new UnsupportedOperationException(); } @Override public boolean isExpired() { throw new UnsupportedOperationException(); } public boolean isNew() { return this.isNew; } } ``` 然后,创建一个 RedisSessionRepository 类,实现 SessionRepository 接口,并实现相应的方法,如下所示: ```java public class RedisSessionRepository implements SessionRepository<RedisSession> { private final RedisTemplate<String, RedisSession> redisTemplate; public RedisSessionRepository(RedisTemplate<String, RedisSession> redisTemplate) { this.redisTemplate = redisTemplate; } @Override public RedisSession createSession() { String id = UUID.randomUUID().toString(); RedisSession session = new RedisSession(id); this.redisTemplate.opsForValue().set(id, session); return session; } @Override public void save(RedisSession session) { this.redisTemplate.opsForValue().set(session.getId(), session); } @Override public RedisSession findById(String id) { return this.redisTemplate.opsForValue().get(id); } @Override public void deleteById(String id) { this.redisTemplate.delete(id); } } ``` 最后,在 Spring Boot 的配置文件指定使用 RedisSessionRepository 实现 SessionRepository,如下所示: ```properties spring.session.store-type=redis spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= spring.redis.timeout=10000 spring.session.redis.flush-mode=on_save spring.session.redis.namespace=spring:session spring.session.repository-type=redis ``` 以上就是关于 Spring Boot 自定义 Session 的步骤,希望能帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值