第11次课后作业《web应用技术》

1、验证过滤器进行权限验证的原理。将自己之前的项目,加上过滤器验证功能。参考以下文章:

加入jwt令牌和过滤器之后的项目结果 

运行结果 

登录成功的页面,密钥的生成 
 登录页面
登录失败的页面

 代码

ScreSessionXmlController
获取管理员数据生成令牌
 新增局部代码 

    //登录
    @PostMapping("login_session")
    //HttpServletRequest用于获取客户端发送的HTTP请求的信息,使用了Spring MVC的@RequestBody注解的参数-HTTP请求的内容体(Body)是JSON或其他格式的数据时,Spring MVC会自动将这个数据转换为Users类型的Java对象。
    public Result login_session(HttpServletRequest httpServletRequest, @RequestBody Manager manager){
        Manager e=screSessionService.login(manager);
        if(e!=null){
            //getSession()与http关联,建立一个会话,会话中设置一个属性username,值为manager.getUsername()
            httpServletRequest.getSession().setAttribute("username",manager.getUsername());
            //获取会话中的username属性(获取到的是object型)
            String username=(String)httpServletRequest.getSession().getAttribute("username");
            System.out.println("查询不为空"+username);
            return Result.success();
        }
        else{
            String username=(String)httpServletRequest.getSession().getAttribute("username");
            System.out.println("查询为空。"+username);
            return Result.error("用户名或密码错误");
        }
    }

    //退出
    @GetMapping("/logout")
    public Result logout(HttpServletRequest request){
        //清除session中保存的当前登陆的账号username
        request.getSession().removeAttribute("username");
        return Result.success("退出成功");
    }

    @GetMapping("/index")
    public Result index1(HttpServletRequest request) {
        List<SreSession> list=screSessionService.findAll();
        return Result.success(list);
    }
//jwt令牌
@GetMapping("/manager_index1")
public Result index1() {

    List<Manager> managersList =screSessionService.findAll1();

    return Result.success(managersList);

}
    @PostMapping("/loginJwt")
    public Result login(@RequestBody Manager manager) {
        //调用业务层:登录功能
        Manager loginManager = screSessionService.login(manager);
        //判断:登录用户是否存在
        if(loginManager !=null ){
            //自定义信息
            Map<String , Object> claims = new HashMap<>();
            claims.put("password",loginManager.getPassword());
            claims.put("username",loginManager.getUsername());
            //使用JWT工具类,生成身份令牌
            String token = JwtUtils.generateJwt(claims);
            System.out.println(token);

            Map<String, String> response = new HashMap<>();
            response.put("token", token);

            return Result.success(token);

        }
        return Result.error("用户名或密码错误");
    }
全部代码 
LoginCheckFilter
ScreSessionMapper 
局部新增代码 
@Select("select * from manager where username = #{username} and password =#{password}")
    public Manager getByManager(Manager manager);

    @Select("select *from manager")
    public List<Manager> list1();
 全部代码

ScreSessionService
局部新增 
public Manager login(Manager manager);

    public List<Manager> findAll1();
全部 
ScreSessionImpl
package com.example.Service.impl;

import com.example.Mapper.ScreSessionMapper;
import com.example.Service.ScreSessionService;
import com.example.pojo.Manager;
import com.example.pojo.PageBean;
import com.example.pojo.Result;
import com.example.pojo.SreSession;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ScreSessionImpl implements ScreSessionService {
    @Autowired
    private ScreSessionMapper screSessionMapper;

    /*@Override
    public List<SreSession> list(){return screSessionMapper.list();}
    //直接返回数据*/

    @Override
    public List<SreSession> findAll(){
        return screSessionMapper.findAll();
    }
    //按照id查询
    @Override
    public SreSession scresessionfindById(Integer sessionid){return screSessionMapper.ScreSessionfindById(sessionid);}

    //按id删除
    @Override
    public int deleteScreSession(Integer sessionid){return screSessionMapper.deleteScreSession(sessionid);}

   /* //增加
    @Override
    public boolean addUser(SreSession sreSession){
        int result=screSessionMapper.add(sreSession);
        return result==1;
    }*/
    //增加
    @Override
    public boolean addUser(SreSession sreSession) {
        int result = screSessionMapper.add(sreSession);
        return result > 0;
    }
    //修改
    @Override
    public boolean editScreSession(SreSession sreSession){return screSessionMapper.editScreSession(sreSession);}

    @Override
    public PageBean list(Integer page, Integer pageSize){
//        当你调用了这个方法之后,紧接着执行的MyBatis查询(通常是一个 select 语句)就会自动被 PageHelper 插件处理,从而只返回指定页的数据。
//        例如,如果你调用了 PageHelper.startPage(2, 10);,然后执行了一个查询,那么你将得到第2页的数据,每页包含10条记录。这意味着你将得到数据库中第11到20条记录(假设记录是从1开始编号的)。
        //设置分页参数
        PageHelper.startPage(page,pageSize);
        //执行分页查询
        List<SreSession> scresessionList=screSessionMapper.findAll();

        //获取分页结果 PageInfo是一个工具类,它接收一个查询结果列表作为参数,并自动分析这个列表来获取分页信息
        PageInfo<SreSession> p=new PageInfo<>(scresessionList);

        //封装PageBean
        PageBean pageBean=new PageBean(p.getTotal(),p.getList());
        System.out.println(page+pageSize);
        return pageBean;
    }

    @Override
    public PageBean list_chaxun(Integer page,Integer pageSize,Integer sessionid,Integer movieid){
        //设置分页参数
        PageHelper.startPage(page,pageSize);

        List<SreSession> scresessionList=screSessionMapper.list_chaxun(sessionid,movieid);
        //System.out.println(poetList);

        //获取分页结果 PageInfo是一个工具类,它接收一个查询结果列表作为参数,并自动分析这个列表来获取分页信息
        PageInfo<SreSession> p=new PageInfo<>(scresessionList);
        //封装PageBean
        PageBean pageBean=new PageBean(p.getTotal(),p.getList());
        return pageBean;
    }

    //登录
    @Override
    public Manager login(Manager manager){
        return screSessionMapper.getByManager(manager);
    }

    @Override
    public List<Manager> findAll1(){
        return screSessionMapper.list1();
    }
}
 JwtUtils
package com.example.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;

public class JwtUtils {

    private static String signKey = "itheima";
    private static Long expire = 43200000L;

    /**
     * 生成JWT令牌
     * @param claims JWT第二部分负载 payload 中存储的内容
     * @return
     */
    public static String generateJwt(Map<String, Object> claims){
        String jwt = Jwts.builder()
                .addClaims(claims)
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
        return jwt;
    }

    /**
     * 解析JWT令牌
     * @param jwt JWT令牌
     * @return JWT第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt){
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }
}
index.html 

导入的依赖

 <!-- fastJSON -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
        <!-- JWT令牌 -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

2、Apifox的使用 

 remarkdown

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值