Tag: MySql


Palvelinohjelmointi – tehtäviä


Kurssin kotisivu

Tehtäviä GitHubissa

Huom. GitHubiin ei ole siirretty .properties -tiedostoja tietoturvasyistä. Näin ollen suurin osa tehtävistä ei toimi suoraan.

Huom2. Tietokantaa käyttävät harjoitukset antavat ensimmäisellä ajokerralla HTTP Status 500 virheilmoituksen, joka liittyy tietokantayhteyteen.

Harjoitukset toimivat kun ohjelman ajaa uudestaan.

Viikko 1

Jsp-sivu, joka sisältää lomakkeen, johon syötetään kirjan nimi, tekijätiedot ja ISBN-koodi. Luotiin servlet, joka poimii tarvittavat tiedot http-pyynnöstä ja tallentaa ne Kirja-olioon requestin attribuutiksi.

Sivu ohjaa http-pyynnön servletiltä toiselle jsp-sivulle, joka osaa tulostaa Kirja-olion tiedot html-muotoiltuna.

Kirja-Ohjelma

 

Viikko 2

 

PreparedStatement, SQL Injection

Jsp-sivu, joka lukee tietokannasta käyttäjänimiä. Käyttäjiä voi lisätä sekä poistaa tietokannasta.

Käyttäjänimet

 

Viikko 3

Maven, JUnit

Demo sisältää kaksi sovellusta, laskimen ja kellon. Laskin-luokan metodeita on testattu JUnit-yksikkötesteillä. SuomiKello-luokan metodeita on myös testattu yksikkötesteillä ja ulkoinen KelloLahde on rajattu testistä pois käyttäen Mock-oliota.

Viikkotentin harjoitusta varten Kello-sovellukseen on lisätty GmtIsoKello -luokka, joka näyttää GMT-ajan ISO-standardin mukaan. GmtIsoKello-luokan metodeita on myös testattu yksikkötestillä ja testi on lisätty AllTests-suiteen

Demo 11

 

Viikko 4

Spring Framework, Spring JDBC

Komentorivisovellus, joka hakee levyjen tietoja tietokannasta.

Viikkotentti 4 harjoitus 13 (GitHub)

 

Viikko 5

Spring Web MVC, Anonyymi sisäluokka, Callback, GeneratedKeyHolder

Lomake, jonka avulla käyttäjä luodaan tietokantaan. Kun lomakkeen avulla on luotu uusi henkilö tietokantaan, käyttäjä siirretään sivulle, joka hakee tietokannasta juuri lisätyn henkilön tiedot ja näyttää ne. Lisätty toiminnallisuus: henkilöt/lista -linkistä sivu hakee tietokannasta kaikkien henkilöiden tiedot.

Viikkotentti 5 harjoitus 11

 

Viikko 6

Internationalization (I18n), Localization (L10n), Bean validation (JSR 303), Custom annotation, Custom validator

Käyttäjä voi vaihtaa käyttöliittymän kieltä napin painalluksella. Kaikki kieliriippuvaiset tekstit on tallennettu kielikohtaisiin properties-tiedostoihin. Henkilön ominaisuuksia on laajennettu. Mikäli syötetty data ei ole validia, käyttäjä ohjataan takaisin lomakesivulle ja häntä opastetaan korjaamaan virheet.

Lisätty toiminnallisuus: Luotu demosovellukseen uusi validaattori kenttiin etunimi, sukunimi ja lahiosoite tarkastamaan, että merkkijono alkaa isolla kirjaimella. Toteutettu validointi uudella annotaatiolla, jonka nimi on @AlkaaIsollaKirjaimella.

Viikkotentti 6 harjoitus 12

 

Harjoitustehtävä

Spring Web MVC, Anonyymi sisäluokka, Callback,GeneratedKeyHolder, Internationalization (I18n), Localization (L10n),

Bean validation (JSR 303), Custom annotation, Custom validator

Käyttäjä voi kirjata järjestelmään painokirjauksia ja hakea kaikki tai tiettynä päivänä tehdyt kirjaukset. Validointia käytetään havaitsemaan tyhjät kentät ja väärässä muodossa annetut tiedot.

PainoOhjelma.v1


Linux palvelimet – kotitehtävät 6


Linux-palvelimet kotitehtävät 6

Lähde  Tero Karvinen 2017: Linux kurssi, http://terokarvinen.com

Harjoitusympäristönä Ubuntu 17.04 (Zesty Zapus) Daily Build

Harjoituskoneen tiedot:

Emolevy X79A-GD65 (8D)

Prosessori Intel(R) Core(TM) i7-3930K

16GiB RAM

Näytönohjain GeForce GTX 690

Ota käyttöön oma virtuaalipalvelin (VPS).

Harjoituksen tavoitteena on ottaa käyttöön oma virtuaalipalvelin Linux-käyttöjärjestelmällä ja varmistaa palvelimen tietoturva luomalla palvelimelle käyttäjä ja käynnistämällä ja konfiguroimalla palomuuri.

Virtuaalipalvelimen tarjoajaksi on valittu DigitalOcean -palvelu, joka on todettu helppokäyttöiseksi ja luotettavaksi palveluksi. Tämän lisäksi palveluun saa 50$ aloitusrahaa Github student developer -paketin kautta.

Virtuaalipalvelimen luonti

Lähtötilanteessa palveluun on rekisteröidytty ja voidaan luoda oma virtuaalipalvelin (Droplet).

Selection_016.png

Käyttöjärjestelmäksi valittiin viimeisin Ubuntun LTS (Long Term Support) versio. Palvelimen tehovaatimuksissa ensimmäisenä tulee vastaan vähäinen keskusmuistin määrä, joten halvin vaihtoehto jätettiin väliin ja valittiin 10 $/kk maksava palvelin.

Palvelimen sijaintia päätettäessä tulee miettiä mistä päin suurin osa palvelimen asiakkaista ottaa yhteyden palvelimeen. Lisäksi tietyt lain pykälät saattavat vaikuttaa palvelimen sijainnin valintaan. Harjoitustyössä palvelimen sijainniksi valittiin Frankfurt. Lopuksi valittiin palvelimien määrä (1) ja geneerinen nimi palvelimelle. Lisäpalveluita ei otettu.

Kun palvelin on luotu, käyttäjä saa sähköpostiinsa viestin, jossa on palvelimen salasana root-käyttäjälle.  Palvelimeen voi ottaa yhteyttä palvelun verkkosivun konsolin kautta tai suojatulla SSH-yhteydellä. Harjoitustyössä käytettiin SSH-yhteyttä testikoneen komentokehotteen kautta.

Palvelimen konfigurointi

$ ssh root@palvelimenip //kirjauduttiin palvelimelle

$ sudo ufw allow 80/tcp //sallittiin http-yhteys palomuurin läpi 

$ sudo ufw allow 22/tcp //sallittiin SSH-yhteydet palomuurin läpi

$ sudo ufw enable //käynnistettiin palomuuri

$ sudo adduser suomisim //lisättiin käyttäjä suomisim. HUOM. KUNNON SALASANA!

$ sudo adduser suomisim sudo //lisättiin käyttäjä ryhmään sudo

$ sudo adduser suomisim adm //lisättiin käyttäjä ryhmään adm

$ sudo adduser suomisim admin //lisättiin käyttäjä ryhmään admin

Seuraavaksi avattiin toinen komentokehote ja testattiin luotuja tunnuksia. Root-tunnuksilla jäätiin vielä palvelimelle varmistamaan, että ongelmat voidaan korjata jos niitä esiintyy. Kun sudo-tunnusten toimivuus on varmistettu, voitiin lukita root-tunnus palvelimelle.

$ ssh suomisim@palvelimenip //kirjaudutiin palvelimelle luodulla käyttäjällä

$ sudo apt-get update && sudo apt-get -y upgrade //testattiin sudo-oikeuksia

$ sudo usermod --lock root //lukittiin root-käyttäjä

Lopuksi voitiin todeta, että virtuaalipalvelin oli otettu onnistuneesti käyttöön. Aikaa operaatioon ja dokumentointiin kului  35 minuuttia.

Asenna weppipalvelin virtuaalipalvelimeesi

Harjoitusta jatkettin aiemmin asennetun ja konfiguroidun virtuaalipalvelimen kanssa. Palvelimeen asennettiin Apache 2 -webpalvelin ja muokattiin Apachen oletussivua.

$ ssh suomisim@palvelimenip //otettiin yhteys palvelimeen

$ sudo apt-get update 

$ sudo apt-get -y install apache2 //apache2 -palvelimen asennus

$ sudoedit /var/www/html/index.html //oletuswebsivun muokkaus

index.html -tiedoston sisältö korvattiin yksinkertaisella html-testisivulla. Tässä vaiheessa huomattiin, että ääkköset eivät toimineet palvelimella. Seuraavasta lähteestä löytyi apua ongelmaan, joka ratkesi seuraavilla komennoilla:

$ sudo apt-get install language-pack-fi

$ sudo locale-gen fi_FI.UTF-8

$ sudo update-locale

Tämän jälkeen siirtymällä selaimella palvelimen IP-osoitteeseen saatiin näkyviin testisivu, johon saatiin nyt lisättyä myös ääkkösiä. Aikaa Apache2 -palvelimen asennukseen ja sivun muokkaukseen kului 5 minuuttia + 15 minuuttia kieliongelmien selvittämiseen.

Selection_022.png

 Laita domain-nimi osoittamaan virtuaalipalvelimeesi

Harjoituksen tavoitteena on ottaa käyttöön domain virtuaalipalvelimelle. Harjoitusta varten valittiin Namecheap -palvelu, joka on luotettava  sekä tarjoaa opiskelijoille pientä alennusta ylempänä mainitun paketin kautta. Palvelussa varmistetaan ensin halutun domain-osoitteen saatavuus ja ostetaan haluttu osoite. Github-paketin kautta tilattuna osoitteesta saa pienen alennuksen tai vaihtoehtoisesti .me -osoitteen saa vuodeksi ilmaiseksi. Huonona puolena palvelu pakottaa .me -osoitteen ostoskoriin sekä Githubin ilmaisen ominaisuuden jollekin ostetulle domainille.

Selection_017.png

Seuraava askel vaatii rekisteröitymistä palveluun sekä luottokorttimaksua palvelusta. Namecheap tarjoaa aggressiivisesti mahdollisuutta yhteistoimintaan Githubin kautta. Kuvaan piilotetun sinisen linkin kautta päästiin kuitenkin itse konfiguroimaan asetuksia.Selection_018.png

Palvelun etusivulla voitiin huomata, että oletuksena molemmilla domaineilla ja kaikilla palveluilla oli auto-renew -toiminto päällä. Koska .me -domainia ei alun perin edes haluttu mukaan eikä sähköpostipalvelua aiottu ottaa käyttöön, pyrittiin minimoimaan ylimääräiset kulut ja jätettiin ainoastaan domain simosuominen.com auto-renew tilaan. Syystä tai toisesta simosuominen.me -domainin sähköpostin auto-renew -toiminto piti käydä erikseen poistamassa alla olevan kuvan valikosta kohdasta Manage.

Selection_020.png

simosuominen.com -domainin asetuksia päästiin siirtymällä Domain list -> Manage. Harjoituksessa käytettiin Advanced DNS -näkymää, joka oli allekirjoittaneelle selkeämpi tapa muokata asetuksia. Alla olevassa kuvassa on kuvattu yksinkertainen konfiguraatio, jolla domain simosuominen.com saatiin viittaamaan Digitaloceanin kautta käyttöön otettuun virtuaalipalvelimeen ja ylempänä tehtyyn Simon Testisivu -websivuun. Palvelimen IP-osoite on sutattu kohdasta Value.Selection_023.png

Tee weppisivu omalle virtuaalipalvelimellesi käyttäen Apachen VirtualHost-asetusta.

Jatkettiin harjoitusta samalla palvelimella ja kokoonpanolla. Tavoitteena oli toteuttaa toinen websivu samalla palvelimella käyttäen Apachen VirtualHost -asetusta. Harjoitusta varten omistettu simosuominen.me -domain oli ohjattu osoittamaan käytettyyn virtuaalipalvelimeen.

$ ssh suomisim@palvelimenip //kirjautuminen palvelimelle

$ mkdir /home/suomisim/html/simome //luotiin kansio simosuominen.me sivustolle

$ nano /home/suomisim/html/simome/index.html //luotiin websivu kansioon

$ sudoedit /etc/apache2/sites-available/simome.conf //luotiin asetustiedosto sivustolle

simome.conf -tiedostoon tehtiin tarvittavat ohjaustiedot (ks. kuva)

Terminal - suomisim@lapikas: ~-html-simome_024.png

$ sudo a2ensite simome.conf //otettiin sivu käyttöön

$ sudo service apache2 restart //käynnistettiin Apache 2 uudestaan

Harjoituksen lopputuloksena virtuaalipalvelimella pyörii kaksi eri verkkosivustoa, simosuominen.com ja simosuominen.me

Selection_025.png

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html” Simo Suominen

Linux palvelimet – kotitehtävät 4


Linux palvelimet – kotitehtävät 4

Lähde  Tero Karvinen 2017: Linux kurssi, http://terokarvinen.com

Harjoitusympäristönä Ubuntu 17.04 (Zesty Zapus) Daily Build

Harjoituskoneen tiedot:

Emolevy X79A-GD65 (8D)

Prosessori Intel(R) Core(TM) i7-3930K

16GiB RAM

Näytönohjain GeForce GTX 690

Asenna alusta lähtien LAMP. (Linux voi olla asennettu valmiiksi tai Live-USB).

AsennettinLAMP otettiin aikaa toimenpiteistä. Ensimmäinen osa on testikoneelle asennettu (L)inux Xubuntu 17.04. Seuraavaksi asennettiin Apache2 -webpalvelin.

$ sudo apt-get update

$ sudo apt-get install apache2

Seuraavaksi todettiin asennuksen onnistuneen käymällä verkkoselaimella osoitteessa http://localhost, jolloin saatiin Apache2:n oletussivu näkyville. Aikaa kului 5min 30sek (toimenpiteet + raportointi).

Selection_001.png

Seuraavaksi otettiin käyttöön käyttäjän kansio palvelimella ja luotiin käyttäjälle aloitussivu. Tähän käytettiin seuraavia komentoja:

$ sudo a2enmod userdir //käyttäjän kansion käyttöönotto

$ sudo service apache2 restart //apache2 -palvelun uudelleenkäynnistys

$ cd //siirryttiin käyttäjän kotihakemistoon

$ mkdir public_html //luotiin kansio tuleville julkisille html -tiedostoille

Linux oli asennettu testikoneelle valmiiksi ja käyttäjä (suomisim) luotu asennuksen yhteydessä. Siirtymällä osoitteeseen http://localhost/~suomisim/ päästiin kansioon, johon käyttäjän kotisivut tehtäisiin.

Selection_003.png

Palomuuri

Seuraava askel oli parantaa tietoturvaa ottamalla käyttöön palomuuri. Tähän käytettiin komentoa sudo ufw enable. Koska kokoonpanoa ei ohjattu eikä testattu etänä, jätettiin palomuuri ehjäksi eikä puhkottu siihen reikiä. Aikaa kului yhteensä 12min.

MySQL

Jatkettiin LAMP-kokoamista asentamalla MySQL -tietokantaohjelma. Samalla asennettiin seuraavissa tehtävissä tarvittavat PHP-lisäpalikat. Käytetyt komennot:

$ sudo apt-get update

$ sudo apt-get -y install mysql-server mysql-client libapache2-mod-php php-mysql

MySQL -asennus kysyi Root-käyttäjän salasanaa, salasanaksi annettiin tarpeeksi monimutkainen salasana. Seuraavaksi kirjauduttiin tietokantaan, luotiin uusi tietokanta sekä käyttäjä ks. tietokannalle.

$ mysql -u root -p //käyttäjä root, -p varmistaa, että salasanaa kysytään erikseen, jotta se pysyy poissa lokeista

create database suomisim character set utf8; //luotiin uusi tietokanta (suomisim) ja valittiin käytettävä merkkijärjestelmä UTF-8

grant all on suomisim.* to suomisim@localhost identified by 'sensuroitusalasana'; //annettiin käyttäjälle suomisim kaikki oikeudet tietokantaan suomisim(ja tuleviin tämän alaisiin tietokantoihin) annettua salasanaa vastaan.

exit //kirjauduttiin ulos root-käyttäjältä

mysql -u suomisim -p //kirjauduttiin käyttäjänä suomisim)

show databases; //näytettiin tietokannat, joihin ks. käyttäjällä on oikeus

Selection_004.png

Näin luotu käyttäjä ei pysty sotkemaan muita kuin oman tietokantansa. Seuraavaksi kokeiltiin automatisoida MySQL -kirjautumisprosessi käyttäjälle suomisim.

$ exit

$ cd

$ nano .my.cnf //luotiin tiedosto, johon kirjattiin seuraavat kirjautumistiedot:
[client]
user="suomisim"
password="sensuroitusalasana"
database="suomisim"

Kun tämän jälkeen ajettiin komento mysql, päästiin kirjautumaan oikeaan tietokantaan oikealla käyttäjällä ilman hidasta kirjautumisprosessia. Aikaa kului alusta yhteensä 29 minuuttia. Lopuksi otettiin vielä PHP käyttöön ja varmistettiin sen toimivuus:

PHP asennus ja testaus

$ cd /etc/apache2/ //siirryttiin apache2 asetuskansioon

$ grep -ir php * //haettiin ks. kansion tiedostoista merkintöjä PHP

$ sudoedit /etc/apache2/mods-available/php7.0.conf //muokattiin tiedostoa, joka löytyi edellisen haun perusteella

Tiedostosta otettiin alla olevat asetukset pois päältä lisäämällä rivien eteen kommenttimerkin #.

Selection_005.png

$ sudo service apache2 restart 

$ cd

$ cd public_html

$ nano index.php

Lisättiin index.php -tiedostoon seuraava rivi: <?php print(2+2+”\n\n”); ?>

http://localhost/~suomisim/ -sivulla näkyi PHP-koodilla kirjoitetun laskutoimituksen tulos -> PHP toimii. Kokomaisaika LAMP-harjoituksen läpikäyntiin ja raportointiin oli n. 45 minuuttia.

Tee weppisivu, joka lukee PHP:lla rivejä tietokannasta.

Harjoitukseen käytettiin edellisessä tehtävässä asennettua LAMP:ia. Aloitettiin harjoitus luomalla tietokantataulu käyttäjälle suomisim. Tämän jälkeen lisättiin tietoja ja varmistettiin, että tiedot tallentuivat tietokantaan.

$ mysql //kirjauduttiin sisään

use suomisim; //valittiin oma tietokanta

create table pizza(id int auto_increment primary key, name varchar(1024), taste varchar(1024)); //luotiin tietokanta pizza ja siihen arvot id, name, taste

insert into pizza(name) values ('Kinkku'); //lisättiin tietokantaan pizza tietue kinkku

insert into pizza(name) values ('Tonnikala');

insert into pizza(name) values ('Ananas');

update pizza set taste="Herkullinen" where name="Kinkku"; //lisättiin tietueelle kinkku arvo Herkullinen

update pizza set taste="OK" where name="Tonnikala";

update pizza set taste="Menettelee" where name="Tonnikala";

select * from pizza; 

Selection_006.png

Näin varmistettiin, että tietokannan tiedot ovat ajan tasalla. Seuraavaksi luotiin websivu, joka hakee tiedot tietokannasta. Harjoituksen vuoksi luotiin ja muokattiin tiedosto Geany-tekstieditorilla, joka toimi erinomaisesti. Lähteenä PHP-koodille käytettiin w3schools.com -sivua. Koodia muokattiin omaan tietokantaan soveltuvaksi alla olevan kuvan mukaisesti.

-PHPo.php - -home-suomisim-public_html - Geany_007.png

Lopputuloksena tuotantoon valmis websivu, joka hakee pizzojen tiedot MySQL -tietokannasta. Alla kuvankaappaus sivusta.

Selection_008.png

Laita liitteeksi tai linkiksi raporttiisi tällä komenolla kerätty log.txt:

tail /var/log/syslog /var/log/auth.log /etc/lsb-release /var/log/apache2/*.log /proc/uptime >log.txt

==> /var/log/syslog <==
Feb 12 20:25:30 thor anacron[1281]: Job `cron.daily’ terminated
Feb 12 20:25:30 thor anacron[1281]: Normal exit (1 job run)
Feb 12 20:27:26 thor kernel: [ 421.746964] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24564 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:27 thor kernel: [ 422.991959] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24565 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:28 thor kernel: [ 423.897291] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24566 PROTO=UDP SPT=1900 DPT=59052 LEN=495
Feb 12 20:27:29 thor kernel: [ 424.973855] [UFW BLOCK] IN=eno1 OUT= MAC=d4:3d:7e:01:b0:4b:30:59:b7:8b:f5:60:08:00 SRC=192.168.1.112 DST=192.168.1.87 LEN=515 TOS=0x00 PREC=0x00 TTL=128 ID=24567 PROTO=UDP SPT=1900 DPT=59052 LEN=495

==> /var/log/auth.log <==

==> /etc/lsb-release <==
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.04
DISTRIB_CODENAME=zesty
DISTRIB_DESCRIPTION=”Ubuntu Zesty Zapus (development branch)”

==> /var/log/apache2/access.log <==

==> /var/log/apache2/error.log <==
[Sun Feb 12 20:25:29.382208 2017] [mpm_prefork:notice] [pid 1442] AH00163: Apache/2.4.23 (Ubuntu) configured — resuming normal operations
[Sun Feb 12 20:25:29.382233 2017] [core:notice] [pid 1442] AH00094: Command line: ‘/usr/sbin/apache2’

==> /var/log/apache2/other_vhosts_access.log <==

==> /proc/uptime <==
461.12 5351.63

Tee pinta-alan laskuri PHP:lla. Eli käyttäjä syöttää lomakkeella (form) pellon pituuden ja leveyden, laskuri kertoo weppisivulla pellon alan.

Pinta-ala-ohjelma toteutettiin Geany-tekstieditorilla, jolla luotiin kaksi .php tiedostoa, pala.php (pääsivu) ja pala-action.php.

pala.php

<!doctype html>

<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Pinta-ala-Ohjelma</title>
 <meta name="author" content="Simo Suominen">
 <link rel="stylesheet" href="css/styles.css?v=1.0">

</head>

<body>
 http://js/scripts.js
 
 
 <form action="pala-action.php" method="post">
 <p>Anna pellon leveys metreissä: <input type="number" name="leveys" /></p>
 <p>Anna pellon pituus metreissä: <input type="number" name="pituus" /></p>
 <p><input type="submit" /></p>
</form>
 
</body>
</html>

pala-action.php

Pellon leveys on <?php echo htmlspecialchars($_POST['leveys']); ?> metriä
<p></p>
Pellon pituus on <?php echo htmlspecialchars($_POST['pituus']); ?> metriä

<p></p>
Pellon kokonaispinta-ala on

<?php

$first_number = htmlspecialchars($_POST['leveys']);
$second_number = htmlspecialchars($_POST['pituus']);
$sum_total = $second_number * $first_number;

print ($sum_total);

?>

neliömetriä.

Lopputuloksena oli yksinkertainen websivu, joka kysyi käyttäjältä pellon pituutta ja leveyttä ja laski niiden perusteella pellon pinta-alan.

Selection_010.png

Selection_012.png

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html” Simo Suominen