十次方微服务鉴权

一、鉴权工具类

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

        <dependency>

            <groupId>io.jsonwebtoken</groupId>

            <artifactId>jjwt</artifactId>

            <version>0.6.0</version>

        </dependency>

         <dependency>

            <groupId> org.springframework.boot </groupId>

            <artifactId> spring-boot-configuration-processor </artifactId>

            <optional> true </optional>

        </dependency>

(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<String,String> 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);

}

}

测试运行结果:



完美结束
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容