十次方微服务鉴权

一、鉴权工具类

    (1)tensquare_common工程引入依赖(考虑到工具类的通用性)

        

            io.jsonwebtoken

            jjwt

            0.6.0

       

        

            org.springframework.boot

            spring-boot-configuration-processor

            true

       

(2)修改tensquare_common工程,创建util.JwtUtil

@ConfigurationProperties("jwt.config")

public class JwtUtil {

    private String key ;

    private long ttl ;//一个小时

    public String getKey() {

        return key;

    }

    public void setKey(String key) {

        this.key = key;

    }

    public long getTtl() {

        return ttl;

    }

    public void setTtl(long ttl) {

        this.ttl = ttl;

    }

    /**

    * 生成JWT

    *

    * @param id

    * @param subject

    * @return

    */

    public String createJWT(String id, String subject, String roles) {

        long nowMillis = System.currentTimeMillis();

        Date now = new Date(nowMillis);

        JwtBuilder builder = Jwts.builder().setId(id)

                .setSubject(subject)

                .setIssuedAt(now)

                .signWith(SignatureAlgorithm.HS256, key).claim("roles", roles);

        if (ttl > 0) {

            builder.setExpiration( new Date( nowMillis + ttl));

        }

        return builder.compact();

    }

    /**

    * 解析JWT

    * @param jwtStr

    * @return

    */

    public Claims parseJWT(String jwtStr){

        return  Jwts.parser()

                .setSigningKey(key)

                .parseClaimsJws(jwtStr)

                .getBody();

    }

}

(3) 修改改tensquare_user工程的application.yml, 添加配置

jwt: 

config: 

key: eknaij

    ttl: 360000

二、管理员登陆后台签发token

(1)配置bean .修改tensquare_user工程UserApplication类

@Bean public JwtUtil jwtUtil(){ return new util.JwtUtil(); }

(2)修改AdminController的login方法

@Autowired

private JwtUtil jwtUtil;

/**

* 管理员登录

* @param loginMap

* @return

*/

@RequestMapping(value="/login",method=RequestMethod.POST)

public Result login(@RequestBody Map loginMap){

Admin admin = adminService.findByLoginnameAndPassword(loginMap.get("loginname"), loginMap.get("password"));

if(admin!=null){

//生成token

String token = jwtUtil.createJWT(admin.getId(), admin.getLoginname(), "admin");

Map map=new HashMap();

map.put("token",token);

map.put("name",admin.getLoginname());//登陆名

return new Result(true,StatusCode.OK,"登陆成功",map);

}else{

return new Result(false,StatusCode.LOGINERROE,"用户名或密码错误",null);

}

}

测试运行结果:



完美结束

你可能感兴趣的:(十次方微服务鉴权)