Online Judge(OJ)搭建——5、配置

Spring

配置一些本地类,还有 HTML form 提交文件的解析器。

package per.piers.onlineJudge.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;

@Configuration
public class WebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootConfig.class, SecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(new MultipartConfigElement(""));
    }

}

Spring Security

Spring 需要从数据库获取权限相关数据,所以需要配置数据源。之后根据相关用户身份,配置访问的权限。

package per.piers.onlineJudge.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import javax.sql.DataSource;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private DataSource dataSource;

    @Autowired
    public SecurityConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery("SELECT email, password, enabled FROM users WHERE email=?")                                                                        // password
                .authoritiesByUsernameQuery("SELECT email, role FROM users WHERE email=?");
    }

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .authorizeRequests()
                // user
                .regexMatchers("/user/information").hasAnyAuthority("user","admin")
                // test
                .regexMatchers("/test/question/\\d+").hasAnyAuthority("user","admin")
                // score
                .regexMatchers("/score/.+").hasAnyAuthority("user","admin")
                // testManager
                .regexMatchers("/testManager/.+").hasAnyAuthority("admin")
                // others
                .anyRequest().permitAll().and() // set authorization matcher
                .formLogin().loginPage("/user/login").defaultSuccessUrl("/user/information").and()
                .rememberMe().tokenValiditySeconds(604800).key("OnlineJudge").and()
                .logout().logoutUrl("/user/logout").logoutSuccessUrl("/user/login");
    }

}

由于 Spring Security 的默认编码是 ISO-8850-1,所以需要配置 CharacterEncodingFilter 把默认编码变更为 UTF-8。

package per.piers.onlineJudge.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
import org.springframework.web.filter.CharacterEncodingFilter;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;

@Configuration
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
    }

}

MyBatis

Online Judge(OJ)搭建——2、数据库,SQL语句介绍过。

数据源

JNDI

在程序中,将数据源托管给专人负责,此为 JNDI 方式。这里托管给 Tomcat 负责,在OnlineJudge/WEB-INF/META-INF/context.xml配置。这种方式将程序和数据库链接解耦,推荐。

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="mybatis"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/online_judge?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true"
              username="root"
              password="woaimysql-135"
              maxTotal="20"
              maxIdle="10"
              maxWaitMillis="10000"/>
</Context>
时间: 2024-08-08 09:41:09

Online Judge(OJ)搭建——5、配置的相关文章

Ubuntu 14.04 Virtual Judge 的搭建

Ubuntu 14.04 Virtual Judge 的搭建 博客的排版可能不是很好,可以下载本文的PDF: Ubuntu 14.04Virtual Judge 的搭建 本人是一名ACM弱菜,由于集训队需要, 我们决定架设自己的OnlineJudge和Virtual Judge,于是开始了噩梦般的搭建. OJ的搭建,非常顺利,参考的是 Ubuntu Server 12.04搭建hustoj 这篇博客 写得非常好,其他不多说,如果有需要搭建自己学校的OJ的朋友,可以参考, 主要就是架设LAMP,其

打印机故障转移集群之二:目标存储服务器的搭建与配置

目标存储服务器的搭建与配置: 下载StarWind软件http://download.csdn.net/detail/kk185800961/8806409 登录到磁盘集群服务器 打开磁盘管理器,转换到动态磁盘,并创建 简单卷并格式化,如下图: 格式化后,硬盘正常使用,在该盘创建一个文件夹 DiskImage,稍后使用: 防火墙设置:下面我们需要对防火墙进行简单设置,以允许节点服务器访问目标服务器.所用到的端口有3260和3261. 打开 StarWind 软件,进入管理中心,选择本地"连接&q

nagios的搭建及配置----(上)

首先说下自己的搭建环境.RedHat6.4系统 nagios-4.0.7.关闭selinux和iptables服务 1,准备工作,安装好nagios所需要的软件 Apache    PHP    GCC compiler GD development libraries yum install httpd php gcc glibc glibc-common  gd gd-devel 2,创建nagios使用的账号和组,首先要切换成管理员账号 [[email protected] ~]usera

windows下搭建和配置java环境

基于很多原因,还是得说说java环境的搭建和配置. 1.下载JDK: jdk和jre的区别:jre表示运行环境,jdk除了运行环境,还带有调试开发环境. 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 这边主要讲解jdk7的安装. 此外http://www.oracle.com/technetwork/java/javase/downloads/index.html  这

【初学菜鸟作--samba搭建与配置】

Samba(跨平台的共享服务)使用以及配置案例:       实验一: 工作组为Tarena       将目录 /usr/src 共享给所有人       共享名设为 tools       允许所有人访问.无需密码验证       访问权限为只读 实验步骤: 配置服务端与客户端的ip地址,保证连通 通过yum安装samba-client服务 安装:samba-commonsamba-client完成后,进行主配置文件修改来配置共享 [[email protected] samba]# vim

基于CentOS6.5进行IPA服务的搭建——客户端配置

前面介绍了IPA服务端的配置,IPA服务可以为Linux系统提供用户的集中化管理服务.下面我们看一下客户端的具体配置. 操作步骤: (1)在另外一台主机上安装CentOS6.5操作系统,作为IPA客户端主机 (2)配置客户端网络参数(配置完成后重启系统) [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:F4:B0:3A TYPE=Ethernet UU

Vss 搭建与配置

搭建 windows下安装Vss2005 在windows下为每个Vss用户添加账户 配置 配置Vss server(打开Visual SourceSafe Administrator) 创建Vss database(File->new database) 为database创建用户(Users->add user) 打开用户权限管理(Tools->Options->Project rights).如图打钩: 为database创建project(Archive->Archi

Sftp搭建与配置参考

Sftp搭建与配置参考 1. 介绍 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式.其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认

Nagios 搭建与配置

Nagios 搭建与配置 实验环境 centos6.5 两台 实验步骤 一.安装Nagios的依赖关系: yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-devel mysql-server xinetd 二.安装配置Nagios(监控本机) 添加nagios运行所需要的用户和组: useradd nagios 把apache加入到nagios组 usermod -a -G nag

redis搭建及配置

redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数