IDEA 快速构建一个 SpringBoot+Shiro项目 并打包

1、创建一个项目



2、选择对应的jdk版本和spring initializr(表示创建的是spring boot项目)



3、选择打包的类型(这里选择的是jar包,也可以选择war包),jdk的版本,以及一些配置信息



4、这里springboot的版本选择和个人的环境有关,也可以后续在pom.xml文件中修改



5、由于我这里需要的spring boot 版本是2.2.6.RELEASE,所以这里需要在pom.xml文件中修改



6、添加项目依赖(因个人项目而异)

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--            <exclusions>-->
            <!--                <exclusion>-->
            <!--                    <groupId>org.springframework.boot</groupId>-->
            <!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
            <!--                </exclusion>-->
            <!--            </exclusions>-->
            <!--            <scope>provided</scope>-->
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--指定shiro版本为1.5.2-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

7、配置maven仓库



8、新建java类

LoginController.java

package com.lehend.shiroauth;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoginController {
    @PostMapping("/doLogin")
    public void doLogin(String username, String password) {
        Subject subject = SecurityUtils.getSubject();
        try {
            subject.login(new UsernamePasswordToken(username, password));
            System.out.println("success");
        } catch (AuthenticationException e) {
            e.printStackTrace();
            System.out.println("failed");
        }
    }
    @GetMapping("/admin/{name}")
    public String hello(@PathVariable String name) {
        return "admin page";
    }

    @GetMapping("/login")
    public String  login() {
        return "please login!";
    }
}

MyRealm.java

package com.lehend.shiroauth;

import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

public class MyRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        String username = (String) authenticationToken.getPrincipal();
        if (!"java".equals(username)){
            throw new UnknownAccountException("unkown user");
        }
        return new SimpleAuthenticationInfo(username, "123", getName());
    }
}

ShiroConfig.java

package com.lehend.shiroauth;

import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.LinkedHashMap;
import java.util.Map;

@Configuration
public class ShiroConfig {
    @Bean
    MyRealm myRealm() {
        return new MyRealm();
    }

    @Bean
    DefaultWebSecurityManager securityManager(){
        DefaultWebSecurityManager  manager = new DefaultWebSecurityManager();
        manager.setRealm(myRealm());
        return manager;
    }

    @Bean
    ShiroFilterFactoryBean shiroFilterFactoryBean(){
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        bean.setSecurityManager(securityManager());
        bean.setLoginUrl("/login");
        bean.setSuccessUrl("/index");
        bean.setUnauthorizedUrl("/unauthorizedurl");
        Map<String, String> map = new LinkedHashMap<>();
        map.put("/doLogin", "anon");
        //admin下的路径需要登录才能访问
        map.put("/admin/*", "authc");
        bean.setFilterChainDefinitionMap(map);
        return  bean;
    }
}

修改ShiroauthApplication.java为如下内容:

package com.lehend.shiroauth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class ShiroauthApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(ShiroauthApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(ShiroauthApplication.class, args);
    }

}

9、在application.properties中填写如下内容

#配置程序端口,默认为8080
server.port= 8099
#用户绘画session过期时间,以秒为单位
server.servlet.session.timeout=
# 配置默认访问路径,默认为/
server.servlet.context-path=/test/

# 配置Tomcat编码,默认为UTF-8
server.tomcat.uri-encoding=UTF-8
# 配置最大线程数
server.tomcat.max-threads=1000

10、刷新,如果maven本地仓库没有对应jar包就会去远程仓库下载



11、启动环境,可以看到环境成功启动,端口为application.properties配置的8099




12、访问首页(需要添加上test)

http://127.0.0.1:8099/test/


13、如果想要打包,可以点击maven的package


可以看到项目会在target目录下成功打为一个jar包


14、jar包可以通过java -jar进行运行


posted @ 2021-06-15 15:13  CCCCC099  阅读(415)  评论(0)    收藏  举报