JSP中使用SpringBoot Security步骤

  1. 引入POM文件
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>springboot-web-jsp</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.创建角色和用户表

(1)
@Entity
@Table(name="SYS_ROLES")
public class SysRole extends BaseEntity{

    private static final long serialVersionUID = 5799265763294090239L;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
(2):**用户表需要实现UserDetails接口,重写getAuthorities()方法**
@Entity()
@Table(name="SYS_USERS")
public class SysUser extends BaseEntity implements UserDetails{

    private static final long serialVersionUID = 2060489721205695393L;

    private String username;

    private String password;

    @ManyToMany(cascade={CascadeType.REFRESH},fetch=FetchType.EAGER)
    private List<SysRole> roles;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authorities=new ArrayList<GrantedAuthority>();
        List<SysRole> sysRoles=this.getRoles();
        for (SysRole sysRole : sysRoles) {
            authorities.add(new SimpleGrantedAuthority(sysRole.getName()));
        }
        return authorities;
    }
}

3.编写Repository,Service类

(1):我是使用的JPA来实现数据访问,此处根据你项目需要来选择需要的Repository接口
public interface SysUserRepository extends JpaRepository<SysUser, String>{

    SysUser findByUsername(String name);
}
(2):**service需要实现UserDetailsService接口,重写loadUserByUsername方法,引入需要的Repository来访问数据库**
@Service
public class SysUserService implements UserDetailsService{

    @Autowired
    SysUserRepository sysUserRepository;

    @Override
    public UserDetails loadUserByUsername(String name)
            throws UsernameNotFoundException {
        SysUser sysUser=sysUserRepository.findByUsername(name);
        if(sysUser==null){
            throw new UsernameNotFoundException("该用户不存在!");
        }
        return sysUser;
    }

}

4.写SecurityConfig配置文件

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    UserDetailsService sysUserService() {
        return new SysUserService();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/static/**");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //此处我把csrf校验取消,开始总是报错,就是它惹的祸
        http.csrf().disable().authorizeRequests()
                        .anyRequest().authenticated() //任何用户需要权限校验
                        .and()
                        .formLogin()
                        .loginPage("/login")
                        .failureUrl("/login?error")
                        .permitAll()
                        .and()
                        .logout().permitAll(); 

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //校验注入Service
        auth.userDetailsService(sysUserService());
    }
}

5.在JSP页面引入spring security标签

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

    ROLE_ADMIN,ROLE_HR,ROLE_COMMON这些角色在sys_roles表中设置
            <sec:authorize access="hasRole(‘ROLE_ADMIN‘)">
                <div>
                    <!-- 3 -->
                    <p class="bg-info">${msg.content_admin}</p>
                </div>
            </sec:authorize>
            <sec:authorize access="hasRole(‘ROLE_HR‘)">
                <div>
                    <!-- 3 -->
                    <p class="bg-info">只有HR角色的人员才能看到</p>
                </div>
            </sec:authorize>

            <sec:authorize access="hasRole(‘ROLE_COMMON‘)">
                <div>
                    <p class="bg-info">所以用户都能看到</p>
                </div>
            </sec:authorize>
时间: 2024-11-02 12:25:36

JSP中使用SpringBoot Security步骤的相关文章

js文件中的中文提示信息发到jsp中出现乱码解决步骤

.js文件创建默认是gbk编码,该js文件中如果有中文,在utf-8的jsp页面中,显示改中文,为乱码! 解决方法: 1--将原来.js文件中的内容全部复制到剪贴板中: 2--修改js文件的编码格式为utf-8: 3--将剪贴板中的内容黏贴到原来的js文件覆盖原有内容,保存,再测试就没有问题了.

JSP中使用JDBC连接MySQL数据库的详细步骤

1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. 4,单击Finish,完成Web project工程的创建. 5,打开MyEclipse Datebase Explore,如图所示 6,按图中所示填写各项内容,并通过Add JARS添加相应的数据库驱动程序. 7,通过Test Driver测试驱动是否连接成功,需要输入密码.成功后如下图所示 8,

jsp中的路径与跳转

在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发: 先说重定向,它的调用方式是这样的 response.sendredirect("uri"); 特点就是 转换后的uri地址会在地址栏显示不过之前的request里的数据不能传送给新的页面# 重定向就是,让服务器再发一个请求# 如下图,浏览器看到response里面的sendredirect,就会重新发一个请求,那么之前的请求所带的数据自然就没有了# 转发: 实现方式是这样的: Reque

5在JSP中使用数据库

1JDBC JDBC(Java DataBase Connection)是Java运行平台的核心类库中的一部分,提供了访问数据库的API,它由一些Java类和接口组成.在JSP中可以使用JDBC实现对数据库中表记录的查询.修改和删除等操作.使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库. 经常使用JDBC进行如下操作: 与一个数据库建立连接. 向已连接的数据库发送SQL语句. 处理SQL语句返回的结果. 连接数据库的常用方式: 应用程序为了能和数据库交互信息

jsp中自定义Taglib

一.自定义标签入门之无参数自定义标签 1.开发自定义标签类当我们在JSP页面使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发(能让美工人员更好地参与JSP页面的开发).自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求. 如果标签类包含属性,每个属性都有对应的getter和setter方法.重写do

JSP中引入js文件

1. 引入的js文件代码执行出错        排查方法:将引入的js文件中的代码直接放到jsp中<script></script>标签内,使用浏览器访问,如果出错,则为js 代码存在问题 2. 如果步骤一中未出错,但引入时报错,则有两种可能 引入Js的指令有错误 引入的Js的编码格式与当前页面不匹配 1) 引入Js的指令有错误     |-source     |    |     |    ---js     |      |     |      ---base.js    

在JSP中如何实现MD5加密

Java源码 /** * 类名:MD5Digest<br> * 说明:用来进行密码加密的md5公用参数<br> * 编写日期:2001/03/05<br> * 修改者:<br> * 修改信息:<br> * @authoredgarlo [email protected] * @version1.0<br> */ import java.security.MessageDigest; import java.security.NoSuc

jsp中的jquery失效以及引入js失败的问题

这段时间在试着看公司用的框架是怎么写的,看到项目中对jquery进一步封装的这一部分,所以自己试着写一些demo来模仿框架中的用法. 再一次的,又遇到了一个问题,jsp中引入js的问题,好久没有自己从头一步一步地在jsp中引入js了,怎么弄都没法达到预想的结果.现在把遇到的问题以及解决办法写在这里,以便以后遇到后查看. 1.在jsp中,引入js但是浏览器总是报404找不到对应的js的处理办法, 先说结论:js最好还是放在WebContent下,然后clean,如果浏览器报404找不到js,那么就

jsp中的自定义标签

(jsp 1.0规范) 一,自定义标签主要用于移除Jsp页面中的java代码: 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1,编写一个实现Tag接口的Java类(标签处理器类). 2,编写标签库描述符(tld)文件,在tld文件中对标签处理器类描述成一个标签.(.tld文件放在WEB-INF目录下面) 二,TAG接口的执行流程: JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法. 1,?public vo